Как подключить вывод поиска к другому вызову 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 

  • Понимание -regex с GNU find
  • Как использовать scp с xargs?
  • Zgrep останавливается после первого совпадения, когда аргументы передаются из xargs
  • команды трубопроводов после трубопровода xargs
  • xargs и <и> в те же файлы
  • find, xargs и mv: переименование файлов с двойными кавычками, расширение и проблема с приоритетом bash
  • Найти файлы рекурсивно, которые старше одного года и не принадлежат конкретному пользователю
  • Эффективная генерация stdin в сценарии оболочки
  • 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 
    Linux и Unix - лучшая ОС в мире.