Как передать по каналу, вывод находки другим находит вызов

"Файл" может быть несколькими вещами. Например, man find списки:

  -type c
          File is of type c:

          b      block (buffered) special
          c      character (unbuffered) special
          d      directory
          p      named pipe (FIFO)
          f      regular file
          l      symbolic link
          s      socket
          D      door (Solaris)

В Вашем случае, что "файл" мог бы быть поврежденной символьной ссылкой или регулярным файлом, содержащим текст "никакой такой файл или каталог".

Можно использовать ls -ld sublime узнать. (Первый символ указывает на тип файла.)

2
05.11.2014, 12:21
2 ответа

Используйте это:

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
0
27.01.2020, 22:05

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

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

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

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

$ 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
3
27.01.2020, 22:05

Теги

Похожие вопросы