Em zsh
, se você tiver os caminhos em uma matriz, como em:
files=($(paths))
(que dividiria a saída de paths
no espaço, na guia nova linha ou nul) ou:
files=(${(f)"$(paths)"})
para dividir em linhas, você pode fazer:
find $^files(N) -type f -name foo.sh
Ou se você quiser restringir a diretórios:
find $^files(/N) -type f -name foo.sh
Agora, se nenhum desses arquivos existir, você poderá acabar executando:
find -type f -name foo.sh
Que com algumas implementações de find
como o GNU significa procurar no diretório atual. Para evitar isso, você poderia fazer:
dirs=($^files(/N))
(($#dirs)) && find $dirs -type f -name foo.sh
Ou:
setopt cshnullglob
find $^files(/) -type f -name foo.sh
Agora, com zsh
, não há necessidade real de find
, você poderia simplesmente fazer:
files=($^files/**/foo.sh(.N))
Isso também teria o benefício de funcionar mesmo se esses arquivos forem iguais a !
ou -name
, o que find
iria sufocar.
Há uma diferença no caso em que esses arquivos são links simbólicos para os diretórios ( find
não procuraria por arquivos neles, enquanto zsh
seria (o que pode realmente ser o que você deseja)).