
Parece haver várias maneiras de fazer isso, incluindo loops em shell script, find e xargs. Qual destes é o melhor e qual é o mais portátil?
Responder1
find . -exec <command> {} \;
para o diretório atual como a raiz da árvore ou em geral:
find <directory> -exec <command> {} \;
Responder2
Use a -print0
opção localizar e a -0
opção xargs
se você tiver nomes de arquivos ou diretórios com espaços:
find {dir} -print0 | xargs -0r {command}
A -print0
opção find imprime os nomes dos arquivos como uma NUL
lista separada por -em vez de espaços em branco, enquanto a -0
opção xargs
instrui-o a quebrar sua entrada em NUL
vez de espaços em branco. Como NUL
é um dos caracteres não permitidos em nomes de arquivos Unix, não há como ser confundido com parte de um nome de arquivo.
A -r
opção existe para que xargs
não haja erro se não houver entrada.
Responder3
Se a portabilidade for um problema, eu ficaria longe de maneiras específicas de fazer isso (há muitas pessoas usando muitos shells diferentes, mas em geral find e xargs são ferramentas realmente básicas que ninguém ousaria mudar radicalmente) .
Usar argumentos básicos de find e xargs deve fornecer uma solução mais portátil.
Responder4
Certifique-se de que a versão do comando que você está usando ainda não tenha um sinalizador para operação recursiva. :)