"Файл" может быть несколькими вещами. Например, 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
узнать. (Первый символ указывает на тип файла.)
Используйте это:
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
Найти не может прочитать его путь от 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