Executar recursivamente o comando 'ar' do Linux

0

Eu tenho um diretório com centenas de subdiretórios com muitos arquivos .lib. Eu sou capaz de usar o ar -x filename.libcomando para descompactar um deles, mas fiquei imaginando como alguém faria isso recursivamente, pois não há um sinalizador recursivo incorporado de acordo com man ar. Agora eu estou tentando fazer

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

mas recebo uma mensagem dizendo para cada arquivo no entry filename.lib in archive. Pesquisei esse erro no Google, mas não encontrei nada relevante, e meu método atual de fazê-lo se baseia nas respostas desta pergunta (a saber, a segunda e seus comentários), mas claramente não está funcionando. Alguma idéia do que estou fazendo de errado?

Alerra
fonte
Meta-nota: não existe "a 2ª resposta". Qualquer usuário pode solicitar respostas por "votos", "mais antigos" ou "ativos" por conta própria; votos mudam, atividade é atualizada ...
Kamil Maciorowski
@KamilMaciorowski meu problema, corrigiu a pergunta e estava se referindo à segunda por votos, o que, porque a pergunta é antiga, provavelmente será a segunda resposta por um tempo.
Alerra 12/07

Respostas:

1

man 1 ar diz que a sintaxe é

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

Portanto, ele funciona com um arquivo de cada vez, os argumentos extras são membros. Você obviamente não deseja especificar membros.

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

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

Dessa forma, todos os arquivos encontrados são passados ​​para um separado ar e atendem aos requisitos de apenas um arquivo.

Nota: -execdirpode ou não ser melhor para você. Consulte para man 1 findaprender a diferença.

Kamil Maciorowski
fonte
Uau! Obrigado pela resposta detalhada e rápida. Também fico feliz em saber que minha resposta original não estava muito distante.
Alerra 12/07