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

  • Как получить код выхода параллельного процесса, запущенного xargs?
  • Утилита, полезная для работы с памятью, возвращает N первых отсортированных значений
  • Передача списка из двух PID для xargs только убивает первый, используя ssh
  • команда solaris + xargs для солярия
  • рекурсивно chmod
  • Пропустить флаги для xargs
  • Как процитировать аргументы с помощью xargs
  • Как использовать `find` для перехода в каталог этого файла
  • 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 - лучшая ОС в мире.