Есть ли способ для `ls -d`, если не переданы никакие аргументы, пропустить отображение `.`?

Есть ли способ для `ls -d`, если не переданы никакие аргументы, пропустить отображение `.`?

У меня есть результаты команды, 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себя игнорировать ., я понятия не имею.)

Связанный контент