Usar -print0
é uma opção, mas nem todos os programas suportam o uso de fluxos de dados delimitados por nullbyte, portanto, você precisará usar xargs
com a opção -0
para algumas coisas, como a resposta do Gnouc observou.
Uma alternativa seria usar as opções find
-exec
ou -execdir
. O primeiro dos seguintes itens alimentará os nomes de arquivos para somecommand
, um de cada vez, enquanto o segundo será expandido para uma lista de arquivos:
find . -type f -exec somecommand '{}' \;
find . -type f -exec somecommand '{}' +
Você pode achar que é melhor usar globbing em muitos casos. Se você tiver um shell moderno (bash 4+, zsh, ksh), poderá obter globalização recursiva com globstar
( **
). No bash, você precisa definir isso:
shopt -s globstar
somecommand ./**/*.txt ## feeds all *.txt files to somecommand, recursively
Eu tenho uma linha dizendo shopt -s globstar extglob
no meu .bashrc, então isso está sempre habilitado para mim (assim como os globs estendidos, que também são úteis).
Se você não quiser recursividade, obviamente use apenas ./*.txt
, para usar todos os * .txt no diretório de trabalho. O find
tem alguns recursos de pesquisa refinados muito úteis e é obrigatório para dezenas de milhares de arquivos (nesse ponto você encontrará o número máximo de argumentos do shell), mas para o uso diário é desnecessário.