ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

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

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

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

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

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

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

 

Используйте команду 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

 

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

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

В этой ситуации вы можете использовать */в конце пути к каталогу 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

 

 

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

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

3 directories

 

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

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

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

echo */

 

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

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

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

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

Exit mobile version