Список только каталогов в UNIX

Я хочу указать только каталоги в указанном пути (ls не имеет такой опции). Кроме того, это можно сделать с помощью одной строки?

Ответ 1

Попробуйте это ls -d */, чтобы просмотреть каталоги в текущем каталоге

Ответ 2

Попробуйте следующее:

find . -maxdepth 1 -type d

Ответ 3

Следующие

find * -maxdepth 0 -type d

в основном фильтрует расширение '*', т.е. все записи в текущем каталоге, в соответствии с условием -type d.

Преимущество в том, что вывод такой же, как ls -1 *, но только с каталогами и записи не начинаются с точки

Ответ 4

Вы можете использовать ls -d */ или tree -d

Другим решением будет globbing, но это зависит от используемой оболочки и поддержки подстановки для каталогов.

Например, ZSH:

zsh # ls *(/)

Ответ 5

Поскольку существует множество способов сделать это, вот еще один:

tree -d -L 1 -i --noreport
  • -d: каталоги
  • -L: глубина дерева (следовательно, 1, наш рабочий каталог)
  • -i: нет отступов, только имена печати
  • - noreport: не сообщать информацию в конце списка деревьев

Ответ 6

ls -l | grep '^d'

Вы можете создать псевдоним и поместить его в файл профиля

alias ld="ls -l| grep '^d'"

Ответ 7

find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'

Ответ 8

используйте это, чтобы получить список каталогов

ls -d */ | sed -e "s/\///g"

Ответ 9

Чтобы перечислить каталоги в текущем рабочем каталоге ls -d */. И если вам нужно перечислить скрытые каталоги, используйте эту команду ls -d .*/

Ответ 10

Ответ будет зависеть от вашей оболочки.

В zsh, например, вы можете сделать следующее:

echo *(/)

И будут показаны все каталоги в текущем рабочем каталоге.

Подробнее см. man zshexpn.

Альтернативным подходом было бы использовать find(1), который должен работать на большинстве вкусов Unix:

find . -maxdepth 1 -type d -print  

find(1) имеет много применений, поэтому я определенно рекомендую man find.

Ответ 11

find specifiedpath -type d

Если вы не хотите рекурсировать в подкаталогах, вы можете сделать это вместо:

find specifiedpath -type d -mindepth 1 -maxdepth 1

Обратите внимание, что будут также перечислены "точечные" каталоги (название которых начинается с .); но не специальные каталоги . и ... Если вам не нужны "точечные" каталоги, вы можете просто выбрать grep:

find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'

Ответ 12

Вы можете использовать команду tree со своим переключателем d, чтобы выполнить это.

% tree -d tstdir
tstdir
|-- d1
|   `-- d11
|       `-- d111
`-- d2
    `-- d21
        `-- d211

6 directories

см. man tree для получения дополнительной информации.

Ответ 13

Если у меня есть этот каталог:

ls -l

lrwxrwxrwx  1 nagios nagios     11 août   2 18:46 conf_nagios -> /etc/icinga
-rw-------  1 nagios nagios 724930 août  15 21:00 dead.letter
-rw-r--r--  1 nagios nagios  12312 août  23 00:13 icinga.log
-rw-r--r--  1 nagios nagios   8323 août  23 00:12 icinga.log.gz
drwxr-xr-x  2 nagios nagios   4096 août  23 16:36 tmp

Чтобы получить все каталоги, используйте -L для разрешения ссылок:

ls -lL | grep '^d'

drwxr-xr-x 5 nagios nagios   4096 août  15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp

Без -L:

ls -l | grep '^d'

drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp
Не найден каталог

conf_nagios.

Ответ 14

### If you need full path of dir and list selective dir with "name" of dir(or dir_prefix*):
find $(pwd) -maxdepth 1 -type d -name "SL*"

Ответ 15

Это работает для меня:

`ls -F | grep /`

(Но я переключаюсь на echo */, как упоминалось в @nos)

Ответ 16

Здесь другое решение, которое показывает связанные каталоги. Я немного предпочитаю это, потому что это подмножество "нормального" вывода ls -l:

ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always

Ответ 17

du -d1, пожалуй, самый короткий вариант. (Пока вам не нужно передавать данные в другую команду.)

Ответ 18

Чтобы получить список только каталогов по указанному пути, просто введите ls -l | grep drw