
У меня есть результаты команды, find
проходящей через xargs
. ls -d
Когда нет соответствующих файлов, я получаю:
.
как единственный вывод, потому что по умолчанию ls -d
отображается:
.
..., когда не указаны аргументы (имя_файла). Есть ли способ ls -d
опустить .
, когда не переданы аргументы и просто не отображать вывод?
Обновлять: Вы просто не можете убедить ls -d
не показывать .
:
.
ls -d -A\ # Skip implied
--hide=.\ # No, really, skip implied
--ignore=. # I mean it, damn it!
.
:)
решение1
Использование xargs
вместе с find
- это так в духе 1980-х...
Позвоните, например:
find . -type d -exec ls -d {} +
и команда ls никогда не будет вызвана без аргументов.
Функция execplus была добавлена find
в 1989 году Дэвидом Корном для SVr4.
решение2
Вы отметилилинукс, поэтому вы, вероятно, запускаете GNU xargs, у которого есть такая опция:
-r, --no-run-if-empty
If the standard input does not contain any nonblanks, do not run the command.
При наличии find ... | xargs -r ls -d
, ls
вообще не будет запущен, если find
не соответствует ничему.
find
может все еще совпадать .
явно. Чтобы избежать этого, добавьте ! -name .
к выражению поиска. Или используйте -mindepth 1
(в GNU find), чтобы предотвратить find
сопоставление любого из путей, указанных в командной строке.
(Как заставить ls
себя игнорировать .
, я понятия не имею.)