Поиск по сайту:
Сознательная дисциплина — разве это не есть истинная свобода? (Рерих).

Как вывести список только каталогов в Linux

08.11.2020
3 способа записи списка в файл на Python

Команда ls в Linux используется для вывода содержимого любого каталога.

По умолчанию в нем отображается все содержимое, будь то файл, каталог, ссылка или именованный канал.

Но что, если вы хотите перечислить только каталоги?

Как и все в Linux, есть несколько способов выполнить одну и ту же задачу. Список только каталогов ничем не отличается:

  • ls -d */
  • ls -l | grep ‘^d’
  • find . -maxdepth 1 -type d
  • echo */
  • tree -d -L 1

 

Используйте команду ls для вывода только списка каталогов

Всегда полезно делать это с помощью знакомой команды ls, потому что это команда, которую вы используете для отображения содержимого каталога.

Чтобы вывести список только подкаталогов , используйте параметр -d с командой ls следующим образом:

ls -d */

 

Вот результат, который он показывает:

[destroyer@andreyex]$ ls -d */
another_dir/  my_dir/

 

Почему */? Потому что без него ls -d будет возвращено только имя каталога. В списке опции -d каталоги не его содержимое (который включает в себя файл, каталоги и т.д.).

Это */ – шаблон. С помощью * вы перечисляете все содержимое (включая содержимое подкаталогов), а шаблон / ограничивает каталоги.

Вы можете комбинировать его с опцией длинного листинга -l и большинством других опций:

[destroyer@andreyex]$ ls -ld */
drwxrwxr-x. 1 destroyer destroyer 16 Nov  7 18:22 another_dir/
drwxrwxr-x. 1 destroyer destroyer 44 Nov  7 18:22 my_dir/

 

Если вам не нужна завершающая косая черта (/) в конце имен каталогов, вы можете использовать команду cut, чтобы вырезать ее:

[destroyer@andreyex]$ ls -ld */ | cut -f1 -d'/'
drwxrwxr-x. 1 destroyer destroyer 16 Nov  7 18:22 another_dir
drwxrwxr-x. 1 destroyer destroyer 44 Nov  7 18:22 my_dir

 

Читать  Как лучше всего изучить сценарии Bash

Список только подкаталогов в определенном каталоге

Вышеупомянутая команда работает в текущем каталоге. Что делать, если вы не в том же каталоге?

В этой ситуации вы можете использовать */в конце пути к каталогу ls -d:

ls -d Path/To/Dir/*/

 

Вот пример, когда мы выходим из каталога Documents и затем перечисляю только каталоги внутри каталога Documents:

[destroyer@localhost ~]$ ls -ld Documents/*/
drwxrwxr-x. 1 destroyer destroyer 16 Nov  7 18:22 Documents/another_dir/
drwxrwxr-x. 1 destroyer destroyer 44 Nov  7 18:22 Documents/my_dir/

 

Вы заметили, что в нем нет скрытого каталога? Это один из недостатков этого метода. Вы можете использовать ls -d .*/ для отображения скрытых каталогов, но он отображает только скрытые каталоги.

 

Используйте комбинацию команды ls и grep

Вы всегда можете положиться на старую-добрую команду grep для фильтрации вывода для определенного контента.

Если вы долго перечисляете содержимое, вы можете идентифицировать каталоги, потому что начните с d.

Вы можете использовать grep для фильтрации содержимого, которое начинается с d:

ls -l | grep '^d'

 

Но это дает вам гораздо больше полей, чем просто имена каталогов:

[destroyer@andreyex]$ ls -l | grep '^d'
drwxrwxr-x. 1 destroyer destroyer 16 Nov  8 11:46 another_dir
drwxrwxr-x. 1 destroyer destroyer 44 Nov  8 11:46 my_dir

 

Используйте команду поиска, чтобы вывести список только каталогов

Вот как использовать команду find для вывода списка только подкаталогов:

find directory_path -maxdepth 1 -type d

 

Надеюсь, вы знакомы с командой find. Тем не менее мы объясним.

Читать  Что такое эфемерные среды? Как их эффективно развернуть и использовать

С помощью type d вы просите команду find искать только каталоги.

С помощью maxdepth 1 вы просите команду find сохранить поиск только на текущем уровне (и не заходить в подкаталоги).

[destroyer@andreyex]$ find . -maxdepth 1 -type d
.
./my_dir
./another_dir
./.my_hidden_dir

 

Как вы можете видеть в выводе выше, он также показывает скрытый каталог.

 

Используйте команду tree для вывода списка только каталогов

Если ваша цель – перечислить только каталоги, вы также можете использовать команду tree.

По умолчанию команда tree дает вам полную структуру каталогов. Вы можете изменить его, чтобы отображались только каталоги и только на текущем уровне.

tree -dai -L 1

 

  • d – искать только каталоги
  • a – ищите также скрытые файлы и каталоги
  • i – убрать древовидную структуру с дисплея
  • L 1 – не заходить в подкаталоги

 

Вот результат:

destroyer@andreyex]$ tree -dai -L 1
.
another_dir
my_dir
.my_hidden_dir

3 directories

 

Использование команды echo для вывода списка каталогов

Маловероятный кандидат? Вы будете удивлены, узнав, что команда echo в Linux также может использоваться для отображения содержимого каталога. Попробуйте использовать echo * и убедитесь сами.

Подобно команде ls, вы также можете использовать шаблон */ для вывода списка только каталогов в текущем рабочем каталоге.

echo */

 

Вот результат, идентичный тому, что вы получили с помощью команды ls -d.

Могло быть больше способов перечислить только каталоги, а не файлы. Фактически, обсуждаемые здесь методы могут иметь некоторые «если» и «но» в зависимости от того, что вы ищете.

Читать  Как установить SELinux в разрешающий режим

Если ваша цель – просто отобразить каталоги, большинство команд, которые я обсуждал, будут работать. Если вам нужно что-то более конкретное, например, получить имя каталога только с косой чертой и т. д., Вам придется выполнить некоторое форматирование самостоятельно.

Надеюсь, этот совет по Linux окажется для вас полезным. Вопросы и предложения всегда приветствуются.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Виртуальный частный сервер (VPS) - это виртуализированный сервер, который обычно размещается…

Спасибо!

Теперь редакторы в курсе.