Как перечислить папки с помощью команд bash?

Есть ли способ перечислить только папки в каталоге с помощью команд bash? ( ls команда ls перечисляет все файлы и папки)

  • Почему мой хеш командной строки отличается от хеш-результатов онлайн MD5?
  • Существуют ли какие-либо инструменты в linux для разделения файла на месте?
  • Узнайте, какое приложение запускается при запуске из командной строки Windows.
  • Есть ли средство командной строки Windows для копирования файлов на удаленные компьютеры?
  • Почему у нас есть логин, не-логин, интерактивные и неинтерактивные оболочки bash?
  • Как выполнить ShortCut из командной строки в Windows 7
  • Как узнать, что у моей беспроводной карты включена инъекция?
  • Shell scripting: способ анализа параметров из командной строки
  • Как мне отображать весь экран CMD?
  • Загрузка Chromium OS с USB
  • Ядро Linux - не могу получить доступ к sda16 & sda17
  • Необходимо исправить Windows MBR без использования компакт-диска
  • 7 Solutions collect form web for “Как перечислить папки с помощью команд bash?”

    Вы можете использовать:

     ls -d -- */ 

    Поскольку все каталоги заканчиваются на / , это перечисляет только каталоги в текущем пути. Параметр -d гарантирует, что будут напечатаны только имена каталогов, а не их содержимое.

    Ответ Стивена Мартина дал предупреждение и также перечислил текущую папку, поэтому я бы предложил

     find . -mindepth 1 -maxdepth 1 -type d 

    (Это на Linux, я не мог найти -maxdepth и -mindepth на странице руководства POSIX для поиска)

     find . -maxdepth 1 -type d 

    Перечислит только папки. И как указал Тедди, вам понадобится -maxdepth, чтобы остановить его повторное вторжение в sub dirs

    Ответ Даниила правильный. Вот некоторые полезные дополнения.

    Чтобы исключить список скрытых папок (например, .git ), попробуйте следующее:

     find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \) 

    И чтобы заменить ужасную точку слэш в начале вывода вывода в некоторых средах, используйте это:

     find . -mindepth 1 -maxdepth 1 -type d \( ! -iname ".*" \) | sed 's|^\./||g' 

    Вы «не должны» анализировать вывод ls, или так сказано. Обоснование заключается в том, что выход предназначен для чтения человеком и может сделать его излишне сложным для анализа, если я помню.

    Если вы не хотите ls или find, вы можете попробовать фильтровать «*» с помощью «[-d]».

    Я сделал именно это, по какой-то причине ls и find не работали (имена файлов с пробелами и скобками, которые, я думаю, или что-то еще, что я просматривал), тогда я сделал что-то вроде строк

     for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done 

    Просто подчеркнуть то, что меня смутило, в отношении выбора шаблонов глобусов; Скажем, у вас есть это:

     $ cd /tmp $ mkdir testglob $ for ix in {00,01,02,03} ; do mkdir testglob/mydir_${ix} ; done $ for ix in {00,01,02,03} ; do touch testglob/myfile_${ix} ; done $ for ix in {00,01,02,03} ; do touch testglob/mydir_${ix}.txt ; done $ for ix in {00,01,02,03} ; do mkdir testglob/otherdir_${ix} ; done $ tree testglob/ testglob/ ├── mydir_00 ├── mydir_00.txt ├── mydir_01 ├── mydir_01.txt ├── mydir_02 ├── mydir_02.txt ├── mydir_03 ├── mydir_03.txt ├── myfile_00 ├── myfile_01 ├── myfile_02 ├── myfile_03 ├── otherdir_00 ├── otherdir_01 ├── otherdir_02 └── otherdir_03 8 directories, 8 files 

    Итак, скажем, здесь вы хотите выбрать только mydir* . Обратите внимание, что если вы не укажете завершающую косую черту, ls -d также ls -d файлы:

     $ ls -d testglob/mydir* # also `ls -d -- testglob/mydir*` testglob/mydir_00 testglob/mydir_01 testglob/mydir_02 testglob/mydir_03 testglob/mydir_00.txt testglob/mydir_01.txt testglob/mydir_02.txt testglob/mydir_03.txt 

    … однако, с завершающей косой чертой, то перечислены только каталоги:

     $ ls -d testglob/mydir*/ # also `ls -d -- testglob/mydir*/` testglob/mydir_00/ testglob/mydir_01/ testglob/mydir_02/ testglob/mydir_03/ 

    printf "%s\n" */ будет перечислять все каталоги в $ PWD.

    echo */ также будет работать, но в длинной однострочной, более сложной, когда имена имеют пробелы.

    Давайте будем гением компьютера.