Executar recursivamente o comando Linux 'ar'

0

Eu tenho um diretório com centenas de subdiretórios com muitos arquivos .lib. Eu sou capaz de usar o comando ar -x filename.lib para descompactar um deles, mas eu queria saber como fazer isso de forma recursiva, já que não existe um sinalizador recursivo de acordo com man ar . Agora estou tentando fazer

find . -name '*.lib' -exec ar -x {} +

mas recebo uma mensagem dizendo para cada arquivo no entry filename.lib in archive . Eu pesquisei esse erro, mas não consegui encontrar nada relevante, e meu método atual de fazer isso é baseado em as respostas da pergunta (ou seja, a segunda e seus comentários), mas claramente não está funcionando. Alguma idéia do que estou fazendo errado?

    
por Alerra 12.07.2018 / 21:32

1 resposta

1

man 1 ar diz que a sintaxe é

ar [--plugin name] [-X32_64] [-]p[mod [relpos] [count]] archive [member...]

Então funciona com um arquivo por vez, os argumentos extras são membros. Você obviamente não quer especificar membros.

find … -exec … {} + substitui {} por caminhos mutliple . Caminhos excessivos são interpretados como membros por ar . Você precisa de find … -exec … {} … \; , que substitui {} por apenas um caminho.

find . -name '*.lib' -exec ar -x {} \;

Dessa forma, todos os arquivos encontrados são passados para um separado ar e satisfazem seus requisitos para apenas um arquivo.

Nota: -execdir pode ou não ser melhor para você. Consulte man 1 find para saber a diferença.

    
por 12.07.2018 / 21:42