Eu tenho um diretório com centenas de subdiretórios com muitos arquivos .lib. Eu sou capaz de usar o ar -x filename.lib
comando 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?
linux
command-line
bash
Alerra
fonte
fonte
Respostas:
man 1 ar
diz que a sintaxe é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 porar
. Você precisafind … -exec … {} … \;
que substitui{}
com apenas um caminho.Dessa forma, todos os arquivos encontrados são passados para um separado
ar
e atendem aos requisitos de apenas um arquivo.Nota:
-execdir
pode ou não ser melhor para você. Consulte paraman 1 find
aprender a diferença.fonte