use isso:
find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} -P4 find "{}" -name "war" -type d
A melhor maneira é excluir .
path:
find . -maxdepth 1 -not -path . -type d -print0 |
xargs -0 -I "{}" find "{}" -name "war" -type d
Veja o que estou tentando fazer
find . -maxdepth 1 -type d -print0 | xargs -0 -P4 find -name 'war' -type d
Eu gostaria de criar uma lista de nomes de diretório, terminados em null, e então passar essa lista para xargs, que para cada nome de diretório chama encontrar usando um conjunto de 4 processos.
Meu problema é: Como eu acesso o stdin no comando piped-to find? Algo como
find <STDIN> -name 'war' -type d
Localizar não pode ler seu caminho de stdin, você não pode especificar -
como com muitos outros programas.
Eu recomendo que você use o GNU paralelo para executar coisas paralelamente:
find . -mindepth 1 -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \
find {} -name "war" -type d
Por favor, note o -mindepth 1
adicionado ao primeiro achado. Se você não incluir isso, o diretório atual ( .
) será passado para uma das descobertas também e você obterá resultados duplos.
$ mkdir a b c d e
$ mkdir b/war c/war
$ find . -mindepth 1 -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \
find {} -name "war" -type d
./b/war
./c/war
$ find . -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \
find {} -name "war" -type d
./c/war
./b/war
./c/war
./b/war