Есть ли правильный способ перечислить подкаталоги текущего каталога?

Я могу найти подкаталоги каталога

ls -d -- */ 

или

 ls -l | grep "^d" 

но оба они кажутся косвенными, и я бы предположил, что будет стандартный способ найти только каталоги. Есть ли правильный способ сделать это? А если нет, приведет ли это либо к нежелательному поведению в случае крайних случаев? (Символические ссылки, скрытые каталоги и т. Д.)

Ответ будет зависеть скорее от того, что вы намерены делать с результатом, чем от того, что вы ищете. Если вы просто хотите увидеть список для визуальной ссылки на терминале, ваше первое решение на самом деле довольно приятно. Если вы хотите обработать выход, вам следует использовать другой метод.

Один из самых надежных способов получить список для подачи в другую программу – использовать find .

 find -maxdepth 1 -type d 

Причина, по которой это хорошо для фидов, заключается в том, что find может выводить данные, разделенные -print0 с использованием -print0 или надлежащим образом -print0 строки в качестве аргументов другим программам с использованием -exec . Для справки о том, почему это лучше, чем синтаксический анализ вывода ls, см. ParsingLS в Wiki Грега.

FYI – В ZSH (но не BASH) вы также можете сделать это: ls -d -- *(/) ; Модификатор (/) указывает ZSH только на глобальные каталоги.

Тем не менее, это не очень отличается от вашего собственного предлагаемого решения ( ls -d -- */ ), и оно далеко не стандартное.

Что касается вывода ls (который, вероятно, отличается от других флагов):

 % ls dir0 dir1 dir2 file0 file1 file2 % ls -d -- */ dir0/ dir1/ dir2/ % ls -d -- *(/) dir0 dir1 dir2