Может кто-нибудь объяснить, почему ls -dдает только .и почему */должны быть добавлены в конце, чтобы это работало?
cwd
3
@cwd Если вы не указали никаких файлов, по lsумолчанию используется .. А -dзначит не печатать содержимое каталога, а печатать сам каталог.
Микель
1
@cwd попробуйте использовать ls -pэто показывает /после имени каталога. Так что */это просто шаблон, который сопоставляется с именем каталога и /комбо.
Я знаю, что уже есть выбранный ответ, но вы можете получить запрошенное поведение просто ls:
ls -ld -- */
(Обратите внимание, что «-» отмечает конец параметров, предотвращая интерпретацию имен папок, начинающихся с дефиса, как дополнительных параметров команды.)
В этом списке будут перечислены все не скрытые (если вы не сконфигурируете глобусы своей оболочки для их расширения) каталоги в текущем рабочем каталоге, в котором он запущен (обратите внимание, что он также включает символические ссылки на каталоги). Чтобы получить все подкаталоги какой-либо другой папки, просто попробуйте:
ls -ld /path/to/directory/*/
Обратите внимание, что -l является необязательным.
Приятно. Я никогда не думал, что каталоги имеют неявное /завершение - но теперь, когда я вижу, что вы отвечаете, это имеет смысл. В конце концов, табуляция всегда добавляет его.
gvkv
-d for dir, -l for long format, Какова цель --?
Динешкумар
1
Хотя это выглядит кратко и работает в большинстве случаев, возможно, вы не захотите использовать этот подход, когда нужен настоящий каталог, а не символическая ссылка на каталог. Так что findэто действительно хороший выбор в этом случае.
biocyberman
1
findтакже имеет преимущество, когда число каталогов превышает максимальную длину аргумента.
Стивен Д
Работая в обратном направлении, я просто понял , что вы можете просто игнорировать все , что с расширением: ls -alhF --ignore=*.*. Не уверен , насколько хорошо это будет обрабатывать «скрытые» папки, то есть.myHiddenFolder
Timmah
14
Нет, но простая findкоманда сделает это:
find . -type d -depth 1
или же grep
ls -F | grep /
Вы можете затем псевдоним любой из них, если это необходимо.
На Ubuntu 14.04 это было -maxdepth 1. Также findхотел, чтобы я перевернул заказ:find . -maxdepth 1 -type d
Брэд Купит
Это ls -F | grep /решение творит чудеса! Кажется, это единственная возможность работать на моей машине с FreeBSD. Я думаю, что использование рыбы означает, что что-нибудь с */может не работать?
CJM
Я никогда не работал с Fish, поэтому я не уверен в этом, но опция -F может творить чудеса.
gvkv
7
Мне нравится утилита дерева, чтобы получить обзор структуры каталогов. Он доступен в MacPorts и во всех дистрибутивах Linux, которые я пробовал.
Приятно знать, что я не единственный, кто использует этот grep "^d"хак
Майкл Мрозек
6
Насколько я знаю, поведение, которое он описывает, не является ошибкой и является таким же, если вы используете GNU ls. Опция -d отображает список для каталога, а не его содержимое. Чтобы понять, почему это может быть полезно, посмотрите разницу между: ls -l /homeиls -dl /home
Стивеном Д.
Караты не являются особенными для раковины. Вы можете просто использовать ls -l / | grep ^d. Если будут собираетесь использовать кавычки, так как вам не нужно расширение параметров, сделать их одиночные кавычки. ls -l / | grep '^d', Да, я педант. Но на самом деле, сделай это. :)
Wildcard
-1
$ ls -p | grep /
-pФлаг заставит lsдобавить слэш ( '/') после каждого файла , если этот файл является каталогом.
Самый простой способ - набрать следующую команду. Это работает на большинстве платформ и версий UNIX и Linux. Вы можете пропустить, -Fесли хотите, но это аргумент, который добавляет / в конец имени каталога. -CАргумент захватывает только имена каталогов - все они в текущем каталоге. Если вы хотите видеть только каталоги и подкаталоги в текущем пути, просто добавьте -Rаргумент ( ls -CFR).
Во всех lsреализациях, которые я знаю и в спецификации POSIX ls, -Cэто вывод в столбцах , а не пропуск файлов, не являющихся каталогами. В вашем примере /они печатаются перед именами файлов, чего не lsможет сделать ни одна реализация. С -F, /добавляется к имени файла для файлов каталога.
Стефан Шазелас
Когда я увидел этот ответ, я подумал: «Где это правда?» @ StéphaneChazelas и Jeff Schaller - разве вы не отрицаете откровенно неправильные ответы?
ls -d
дает только.
и почему*/
должны быть добавлены в конце, чтобы это работало?ls
умолчанию используется.
. А-d
значит не печатать содержимое каталога, а печатать сам каталог.ls -p
это показывает/
после имени каталога. Так что*/
это просто шаблон, который сопоставляется с именем каталога и/
комбо.Ответы:
Я знаю, что уже есть выбранный ответ, но вы можете получить запрошенное поведение просто
ls
:(Обратите внимание, что «-» отмечает конец параметров, предотвращая интерпретацию имен папок, начинающихся с дефиса, как дополнительных параметров команды.)
В этом списке будут перечислены все не скрытые (если вы не сконфигурируете глобусы своей оболочки для их расширения) каталоги в текущем рабочем каталоге, в котором он запущен (обратите внимание, что он также включает символические ссылки на каталоги). Чтобы получить все подкаталоги какой-либо другой папки, просто попробуйте:
Обратите внимание, что -l является необязательным.
источник
/
завершение - но теперь, когда я вижу, что вы отвечаете, это имеет смысл. В конце концов, табуляция всегда добавляет его.-d for dir, -l for long format
, Какова цель--
?find
это действительно хороший выбор в этом случае.find
также имеет преимущество, когда число каталогов превышает максимальную длину аргумента.ls -alhF --ignore=*.*
. Не уверен , насколько хорошо это будет обрабатывать «скрытые» папки, то есть.myHiddenFolder
Нет, но простая
find
команда сделает это:или же
grep
Вы можете затем псевдоним любой из них, если это необходимо.
источник
-maxdepth 1
. Такжеfind
хотел, чтобы я перевернул заказ:find . -maxdepth 1 -type d
ls -F | grep /
решение творит чудеса! Кажется, это единственная возможность работать на моей машине с FreeBSD. Я думаю, что использование рыбы означает, что что-нибудь с*/
может не работать?Мне нравится утилита дерева, чтобы получить обзор структуры каталогов. Он доступен в MacPorts и во всех дистрибутивах Linux, которые я пробовал.
Это показало бы все каталоги, два уровня глубоко.
источник
Мне также нужно было просматривать скрытые каталоги, поэтому я изменил приведенное выше предложение в соответствии со своими потребностями.
(в зависимости от оболочки, которая также может включать
.
и..
)источник
С
zsh
(как было установлено по умолчанию в macOS, он даже был/bin/sh
там), вы бы использовали квалификаторы glob для выбора файлов на основе их типа:Список не скрытых каталогов:
Список всех каталогов:
(
.
и..
всегда исключаются, добавляйте их по отдельности, если хотите)Также добавьте символические ссылки на каталоги:
(
-
делает так, чтобы дальнейшие квалификаторы применялись после разрешения символической ссылки).источник
Я думаю, что у ls есть ошибка в Mac OS X. Обходной путь должен использовать grep ...
ls -l / | grep "^d"
источник
grep "^d"
хакls -l /home
иls -dl /home
ls -l / | grep ^d
. Если будут собираетесь использовать кавычки, так как вам не нужно расширение параметров, сделать их одиночные кавычки.ls -l / | grep '^d'
, Да, я педант. Но на самом деле, сделай это. :)-p
Флаг заставитls
добавить слэш ( '/') после каждого файла , если этот файл является каталогом.источник
Самый простой способ - набрать следующую команду. Это работает на большинстве платформ и версий UNIX и Linux. Вы можете пропустить,
-F
если хотите, но это аргумент, который добавляет / в конец имени каталога.-C
Аргумент захватывает только имена каталогов - все они в текущем каталоге. Если вы хотите видеть только каталоги и подкаталоги в текущем пути, просто добавьте-R
аргумент (ls -CFR
).источник
ls
реализациях, которые я знаю и в спецификации POSIXls
,-C
это вывод в столбцах , а не пропуск файлов, не являющихся каталогами. В вашем примере/
они печатаются перед именами файлов, чего неls
может сделать ни одна реализация. С-F
,/
добавляется к имени файла для файлов каталога.это покажет ваши каталоги синим цветом
источник