Я хочу перечислить только каталоги по указанному пути ( lsне имеет такой опции). Кроме того, это можно сделать с помощью однострочной команды?
Я хочу перечислить только каталоги по указанному пути ( lsне имеет такой опции). Кроме того, это можно сделать с помощью однострочной команды?
Ответы:
Попробуйте это, ls -d */чтобы получить список каталогов в текущем каталоге
ls -al | grep '^d'- это гораздо лаконичнее.
*/принудительно отображает только элементы, заканчивающиеся косой чертой, которая в этом случае будет каталогом, даже если -Fопция lsне используется. Аналогично поведению ls *phpи тому, как отображаются все файлы, оканчивающиеся phpна каталог.
echo */сделаю то же самое
Попробуй это:
find . -maxdepth 1 -type d
lsрешений, findон несет единоличную ответственность за выполнение работы (не полагаясь на расширение подстановочного знака оболочки, которое может накладывать ограничения). Это также намного более кратко.
find * -maxdepth 0 -type d.
findобычно выводит, но выводит папки только на глубине 1.
Последующий
find * -maxdepth 0 -type d
в основном фильтрует расширение '*', т.е. все записи в текущем каталоге, по -type dусловию.
Преимущество заключается в том, что вывод такой же, как ls -1 *, но только с каталогами и записи не начинаются с точки
Вы можете использовать ls -d */илиtree -d
Другим решением может быть глобализация, но это зависит от используемой вами оболочки и от того, поддерживается ли глобализация для каталогов.
Например ZSH:
zsh # ls *(/)
tree?
treeон не установлен по умолчанию (хотя он есть в репозиториях).
treeкоманда не является родной командой Unix (исправьте меня, если я ошибаюсь).
Поскольку существует множество способов сделать это, вот еще один:
tree -d -L 1 -i --noreport
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
ls -l | grep '^d'
Вы можете сделать псевдоним и поместить его в файл профиля
alias ld="ls -l| grep '^d'"
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
используйте это, чтобы получить список каталогов
ls -d */ | sed -e "s/\///g"
find specifiedpath -type d
Если вы не хотите выполнять поиск в подкаталогах, вы можете сделать это вместо этого:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Обратите внимание, что каталоги "dot" (чье имя начинается с .) тоже будут перечислены; но не специальные каталоги, .ни ... Если вам не нужны «точечные» каталоги, вы можете просто grepих извлечь:
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
mindepthчтобы избавиться от .! Ad
Ответ будет зависеть от вашей оболочки .
В zsh, например, вы можете сделать следующее:
echo *(/)
И все каталоги в текущем рабочем каталоге будут отображаться.
Смотрите man zshexpnдля получения дополнительной информации.
Альтернативный подход заключается в использовании find(1), которое должно работать на большинстве разновидностей Unix:
find . -maxdepth 1 -type d -print
find(1)имеет много применений, поэтому я определенно рекомендую man find.
Вы можете использовать treeкоманду с ее dпереключателем для достижения этой цели.
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
см. man treeдля получения дополнительной информации.
tree. О, хорошо, я не собирался красть чей-то гром.
Если у меня есть этот каталог:
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 отсутствует.
Это работает для меня:
`ls -F | grep /`
(Но я echo */перехожу к тому, что упомянуто @nos)
Вот еще одно решение, которое показывает связанные каталоги. Я немного предпочитаю это, потому что это подмножество "нормального" вывода ls -l:
ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
В Баш:
ls -d */
Перечислим все каталоги
ls -ld */
перечислит все каталоги в длинной форме
ls -ld */ .*/
перечислит все каталоги, включая скрытые каталоги, в полной форме.
Я недавно переключился на zsh (MacOS Catalina) и обнаружил, что:
ls -ld */ .*/
больше не работает, если текущий каталог не содержит скрытых каталогов.
zsh: no matches found: .*/
Это напечатает вышеупомянутую ошибку, но также не сможет печатать любые каталоги.
ls -ld *(/) .*(/)
Также терпит неудачу таким же образом.
До сих пор я обнаружил, что это:
ls -ld */;ls -ld .*/
это достойный обходной путь. Это ;разделитель команд. Но это означает, что если нет скрытых каталогов, он выведет список каталогов и все равно напечатает ошибку без скрытых каталогов:
foo
bar
zsh: no matches found: .*/
lsэто команда оболочки для списка содержимого текущего каталога
-lявляется флаг , чтобы указать , что вы хотите , чтобы список в Лонгфорда (один элемент в каждой строке + куча другой информации прохладного)
-dявляется флагом , чтобы перечислить все каталоги «как файлы» , а не рекурсивно
*/является Аргумент «перечислить все файлы, заканчивающиеся косой чертой»
*- это простая команда регулярного выражения для «чего угодно», поэтому */просит оболочку перечислить «что угодно, заканчивающееся на« / »»
Смотрите man lsдля получения дополнительной информации.
Я положил это:
alias lad="ls -ld */;ls -ld .*/"
в моем .zshrc, и, кажется, работает нормально.
ПРИМЕЧАНИЕ: я также обнаружил, что
ls -ld .*/ 2> /dev/null
не работает, так как он все еще печатает Sterr в терминал. Я обновлю свой ответ, если / когда найду решение.
Длинный список каталогов
Список каталогов
- ls -d * /