Эй, это довольно изящно, я всегда к нам привык ls -al | grep '^d'- это гораздо лаконичнее.
paxdiablo
43
зачем использовать * / ?? пожалуйста, объясни!?
Чандип
6
У меня нет правильного объяснения, однако я знаю, что */принудительно отображает только элементы, заканчивающиеся косой чертой, которая в этом случае будет каталогом, даже если -Fопция lsне используется. Аналогично поведению ls *phpи тому, как отображаются все файлы, оканчивающиеся phpна каталог.
Дэвид Хэнкок
3
@ user975234 Кто-то задал похожий вопрос, и есть довольно хорошее объяснение опубликованной ссылки
Для меня это выглядит так, как это должно быть сделано. В отличие от предложенных lsрешений, findон несет единоличную ответственность за выполнение работы (не полагаясь на расширение подстановочного знака оболочки, которое может накладывать ограничения). Это также намного более кратко.
Петер
1
Плохая вещь в том, что это не работает, если вы пытаетесь перебрать результаты, и ваши результаты имеют пробелы в именах.
убиквибакон
2
С другой стороны , если вы не хотите включать в себя сам каталог: find * -maxdepth 0 -type d.
Джеймс Ко
@ubiquibacon использовать либо find«с -print0или -execвариант.
1
Это действительно медленно, по крайней мере, на моем Mac. Похоже, он выполняет полный рекурсивный поиск, который findобычно выводит, но выводит папки только на глубине 1.
Кара Брайтвелл,
22
Последующий
find *-maxdepth 0-type d
в основном фильтрует расширение '*', т.е. все записи в текущем каталоге, по -type dусловию.
Преимущество заключается в том, что вывод такой же, как ls -1 *, но только с каталогами и записи не начинаются с точки
И спасибо за объяснение переключателей. Переполнение стека связано с ответами, я всегда ценю, когда люди делают то же, что и вы, с объяснением, а не с «просто прочитайте запись человека!» <- это не ответ.
fusion27
Чтобы начать со строки 2 (пропустите строку только с точкой):tree -d -L 1 -i --noreport | tail -n +2
adius
Это решение с наивысшим рейтингом, которое перечисляет каталоги с мягкими связями и делает это полезным способом, выставляя их в виде ссылки. Я предпочитаю вариант:tree -C -d -L 1 -i --noreport | tail -n+2
Амнон Харел
9
ls -l | grep '^d'
Вы можете сделать псевдоним и поместить его в файл профиля
ссылки не просматриваются этой командой. И ссылка может быть файлом или каталогом. Пример: lrwxrwxrwx 1 root root 21 avril 15 17:38 cron -> / lib / init / upstart-job.
c-toesca
7
find .-maxdepth 1-type d -name [^\.]\* | sed 's:^\./::'
☀ найти. -maxdepth 1 -тип d -name [^ \.] * | sed 's: ^ \ ./ ::' zsh: совпадений не найдено: [^.] *
Майкл Коул
6
Для того, чтобы перечислить каталоги в текущем рабочем каталоге
ls -d */могут быть использованы. И если вам нужно перечислить скрытые каталоги, используйте эту команду
ls -d .*/
ls -d <путь к каталогу пользователя> | sed -e "s / \ /// g" не работает .. какие-нибудь подсказки?
Дванит
Спасибо! Я просто хотел список каталогов без всех разрешений, и это помогло. :)
codingjeremy
5
find specifiedpath -type d
Если вы не хотите выполнять поиск в подкаталогах, вы можете сделать это вместо этого:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Обратите внимание, что каталоги "dot" (чье имя начинается с .) тоже будут перечислены; но не специальные каталоги, .ни ... Если вам не нужны «точечные» каталоги, вы можете просто grepих извлечь:
перечислит все каталоги, включая скрытые каталоги, в полной форме.
Я недавно переключился на 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 */
чтобы получить список каталогов в текущем каталогеисточник
ls -al | grep '^d'
- это гораздо лаконичнее.*/
принудительно отображает только элементы, заканчивающиеся косой чертой, которая в этом случае будет каталогом, даже если-F
опцияls
не используется. Аналогично поведениюls *php
и тому, как отображаются все файлы, оканчивающиесяphp
на каталог.echo */
сделаю то же самоеПопробуй это:
источник
ls
решений,find
он несет единоличную ответственность за выполнение работы (не полагаясь на расширение подстановочного знака оболочки, которое может накладывать ограничения). Это также намного более кратко.find * -maxdepth 0 -type d
.find
«с-print0
или-exec
вариант.find
обычно выводит, но выводит папки только на глубине 1.Последующий
в основном фильтрует расширение '*', т.е. все записи в текущем каталоге, по
-type d
условию.Преимущество заключается в том, что вывод такой же, как
ls -1 *
, но только с каталогами и записи не начинаются с точкиисточник
Вы можете использовать
ls -d */
илиtree -d
Другим решением может быть глобализация, но это зависит от используемой вами оболочки и от того, поддерживается ли глобализация для каталогов.
Например ZSH:
источник
tree
?tree
он не установлен по умолчанию (хотя он есть в репозиториях).tree
команда не является родной командой Unix (исправьте меня, если я ошибаюсь).Поскольку существует множество способов сделать это, вот еще один:
источник
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
Вы можете сделать псевдоним и поместить его в файл профиля
источник
источник
Для того, чтобы перечислить каталоги в текущем рабочем каталоге
ls -d */
могут быть использованы. И если вам нужно перечислить скрытые каталоги, используйте эту командуls -d .*/
источник
используйте это, чтобы получить список каталогов
источник
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
, например, вы можете сделать следующее:И все каталоги в текущем рабочем каталоге будут отображаться.
Смотрите
man zshexpn
для получения дополнительной информации.Альтернативный подход заключается в использовании
find(1)
, которое должно работать на большинстве разновидностей Unix:find(1)
имеет много применений, поэтому я определенно рекомендуюman find
.источник
Вы можете использовать
tree
команду с ееd
переключателем для достижения этой цели.см.
man tree
для получения дополнительной информации.источник
tree
. О, хорошо, я не собирался красть чей-то гром.Если у меня есть этот каталог:
ls -l
Чтобы получить все каталоги, используйте -L для разрешения ссылок:
ls -lL | grep '^d'
Без -L:
ls -l | grep '^d'
Каталог conf_nagios отсутствует.
источник
источник
Это работает для меня:
(Но я
echo */
перехожу к тому, что упомянуто @nos)источник
Вот еще одно решение, которое показывает связанные каталоги. Я немного предпочитаю это, потому что это подмножество "нормального" вывода ls -l:
источник
В Баш:
Перечислим все каталоги
перечислит все каталоги в длинной форме
перечислит все каталоги, включая скрытые каталоги, в полной форме.
Я недавно переключился на zsh (MacOS Catalina) и обнаружил, что:
больше не работает, если текущий каталог не содержит скрытых каталогов.
Это напечатает вышеупомянутую ошибку, но также не сможет печатать любые каталоги.
Также терпит неудачу таким же образом.
До сих пор я обнаружил, что это:
это достойный обходной путь. Это
;
разделитель команд. Но это означает, что если нет скрытых каталогов, он выведет список каталогов и все равно напечатает ошибку без скрытых каталогов:ls
это команда оболочки для списка содержимого текущего каталога-l
является флаг , чтобы указать , что вы хотите , чтобы список в Лонгфорда (один элемент в каждой строке + куча другой информации прохладного)-d
является флагом , чтобы перечислить все каталоги «как файлы» , а не рекурсивно*/
является Аргумент «перечислить все файлы, заканчивающиеся косой чертой»*
- это простая команда регулярного выражения для «чего угодно», поэтому*/
просит оболочку перечислить «что угодно, заканчивающееся на« / »»Смотрите
man ls
для получения дополнительной информации.Я положил это:
alias lad="ls -ld */;ls -ld .*/"
в моем .zshrc, и, кажется, работает нормально.
ПРИМЕЧАНИЕ: я также обнаружил, что
ls -ld .*/ 2> /dev/null
не работает, так как он все еще печатает Sterr в терминал. Я обновлю свой ответ, если / когда найду решение.
источник
du -d1
возможно самый короткий вариант. (Пока вам не нужно передавать данные в другую команду.)источник
Чтобы получить список только каталогов по указанному пути, просто введите ls -l | grep drw
источник
drw
, и исключать любые каталоги, которые не читаются и не пишутся владельцем.grep ^d
работает лучше.Длинный список каталогов
Список каталогов
- ls -d * /
источник