Как подключить вывод поиска к другому вызову find

Вот что я пытаюсь сделать

find . -maxdepth 1 -type d -print0 | xargs -0 -P4 find -name 'war' -type d 

Я хотел бы создать список имен каталогов с нулевым завершением, а затем передать этот список в xargs, который для каждого имени каталога вызывает find, используя пул из 4 процессов.

Моя проблема: как мне получить доступ к stdin в команде piped-to find? Что-то вроде

 find <STDIN> -name 'war' -type d 

2 Solutions collect form web for “Как подключить вывод поиска к другому вызову find”

использовать это:

 find . -maxdepth 1 -type d -print0 | xargs -0 -I {} -P4 find "{}" -name "war" -type d 

лучший способ исключить . дорожка:

 find . -maxdepth 1 -not -path . -type d -print0 | xargs -0 -I "{}" find "{}" -name "war" -type d 

Find не может прочитать свой путь от stdin, вы не можете указать - как со многими другими программами.

Я рекомендую вам параллельно использовать GNU для параллельной работы:

 find . -mindepth 1 -maxdepth 1 -type d -print0 | parallel -0 --jobs 4 \ find {} -name "war" -type d 

Обратите внимание на добавленный -mindepth 1 до первого поиска. Если вы не включите это, текущий каталог ( . ) Будет передан в одно из находок, и вы получите двойные результаты.

 $ mkdir abcde $ 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 
  • копирование нескольких файлов в несколько каталогов
  • zsh "echo SomeText >> ** / filename" в других оболочках
  • Почему «{}» и «%» обычно используются как переменные в xargs?
  • находить и копировать файлы, используя список входных данных и частичные пути к файлам
  • Отправка списка (текстового файла) файлов и путей в xargs
  • эхом basename под xargs?
  • опция xargs -I
  • 'git show' не передает управляющие символы для цвета
  • Используйте массив bash в качестве списка аргументов в списке (с помощью Midnight Commander)
  • копирование подкаталогов, не содержащих определенный файл, в другой каталог
  • Что делает эта командная строка (`echo $ 1 | xargs -n 1 basename | cut -d '.' -f1`)?
  • Linux и Unix - лучшая ОС в мире.