tr -sc "\n$input" '[\n*]' <in | grep -xcFe"$input"
... вероятно, сделает это довольно эффективно. Но он, вероятно, не будет работать особенно хорошо, если вы имеете в виду только совпадение целых слов. Для этого вы можете сделать:
tr \[:space:]\[:punct:] '[\n*]' <in | grep -xcFe"$input"
... или, возможно...
tr -c \[:alnum:]_ '[\n*]' <in | grep -xcFe"$input"
... в зависимости от того, что вам кажется наиболее подходящим.
ls -d
относится к «этому» каталогу, а не к каталогам, содержащимся в месте, где вы работаете ls
.
Это кажется странным, если вы просто запускаете ls -d
, но если вы хотите узнать, скажем, кому принадлежит этот каталог, вы можете выполнить ls -do
и увидеть только владельца текущего каталога.
В ответе на есть гораздо более подробное объяснение, почему ls -d также перечисляет файлы и где это задокументировано?
И много хорошего в Результат ls *, ls **и ls ***, если вы действительно хотите углубиться вls
Утилита ls
выводит список аргументов имени пути, заданных в ее командной строке. Если какой-либо из аргументов соответствует каталогу , то будет отображено полное содержимое этого каталога. Если аргумент не указан, то ls
перечисляет текущий каталог, как если бы использовался ls.
.
Чтобы иметь возможность перечислить каталог (, чтобы увидеть запись каталога для каталога ), а не его содержимое, у вас есть опция -d
для ls
. С его помощью вы можете сказать ls -d dir
и получить запись каталога для dir
, а не ее содержимое.
Причина, по которой ls -d
сама по себе возвращает только точку (текущего каталога ), заключается в том, что он по сути такой же, как ls -d.
, т.е. «дайте мне запись каталога для текущего каталога, не показывая его содержимое».
Ваша команда ls -d */
показывает записи каталогов для всех каталогов в текущем каталоге, которые не имеют скрытых имен. Вы получаете только каталоги из-за /
в конце шаблона. Поскольку вы используете -d
, вы не получаете содержимое этих каталогов.