É para isso que serve o predicado -exec
:
find /some/path -type f -name file.pl -size +10M -exec perl /my/script.pl {} \;
Se você quiser que o seu shell execute os comandos com base na saída de find
, então isso terá que ser bash
/ zsh
específico se você quiser ser confiável como em:
-
zsh
:IFS=$'
' for f ($(find /some/path -type f -name file.pl -size +10M -print0)) { /my/script.pl $f }for f (./**/file.pl(.LM+10)) /my/script.pl $f
embora em
zsh
, você pode simplesmente fazer:while IFS= read -rd '' -u3 file; do /my/script.pl "$file" done 3< <(find /some/path -type f -name file.pl -size +10M -print0)
-
bash
/zsh
for file in $(find...)
Seja o que for que você faça, em bash
ou outros shells POSIX, evite:
IFS='
'; set -f; for file in $(find...)
Ou, pelo menos, reduza o problema fixando o separador de campo na nova linha e desabilitando a globbing:
find /some/path -type f -name file.pl -size +10M -exec perl /my/script.pl {} \;
(que ainda falhará nos caminhos de arquivo que contêm caracteres de nova linha).