it-roy-ru.com

Перечисление только каталогов в UNIX

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

205
S'am

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

302
David Hancock

Попробуй это:

find . -maxdepth 1 -type d
90
Robin

Следующие

find * -maxdepth 0 -type d

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

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

20
radiospiel

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

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

Например ЗШ:

zsh # ls *(/)
13
echox

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

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

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

alias ld="ls -l| grep '^d'"
8
somesh chandra
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
7
mda

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

6
kvivek

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

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

echo *(/)

И все каталоги в текущем рабочем каталоге будут отображаться.

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

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

find . -maxdepth 1 -type d -print  

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

5
Johnsyweb

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

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

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

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

6 directories

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

4
slm

find specifiedpath -type d

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

find specifiedpath -type d -mindepth 1 -maxdepth 1

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

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

4
DomQ
### 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*"
2
Surya

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

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 отсутствует.

2
c-toesca

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

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

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

`ls -F | grep /`

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

1
FractalSpace