Я хочу указать только каталоги в указанном пути (ls
не имеет такой опции).
Кроме того, это можно сделать с помощью одной строки?
Список только каталогов в UNIX
Ответ 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