Linux показать только папки

Как вывести список только директорий используя ls в Bash

Для обработки в скриптах может понадобиться в определённой директории получить только список только папок без файлов. Далее показано, как это сделать разными способами.

1. С помощью ls увидеть все папки кроме скрытых

*/ — это шаблон, который соответствует всем подкаталогам в текущем каталоге (* будет соответствовать всем файлам и подкаталогам; / ограничивает его каталогами). Точно так же, чтобы вывести список всех подкаталогов в /home/mial/bin/aur, используйте:

Чтобы вывести только каталоги в текущей папке:

Чтобы вывести данные в столбик:

2. С помощью ls увидеть все папки вместе со скрытыми

Обратите внимание, что */ не найдёт любые скрытые папки. Чтобы включить и их, укажите их явно:

Обратите внимание, что в примере выше используется два шаблона. Чтобы это стало очевидным, рассмотрим следующий пример: нужно показать только каталоги, в том числе и скрытые в директории /home/mial/bin/aur/:

ls -d /home/mial/bin/aur/.*/ /home/mial/bin/aur/*/

3. С помощью ls и cut

Следующий способ показывает каталоги только в текущей папке, но делает это в виде столбика:

Чтобы показать вместе со скрытыми каталогами:

Чтобы показать только директории в папке /home/mial/bin/aur:

ls -d /home/mial/bin/aur/*/ | cut -f1 -d'/'

4. Используя echo

Этот способ не рекомендуется, если в именах папках могут быть пробелы:

Пример показа всех папок кроме скрытых:

Показ всех скрытых и обычных директорий:

Показ всех скрытых и обычных папок в директории /home/mial/bin/aur/:

echo /home/mial/bin/aur/.*/ /home/mial/bin/aur/*/

5. Используя ls и grep

В этом варианте применяется фильтрация вывода с помощью grep. Этот способ имеет ограничение — папки должны выводиться в виде подробного списка:

Читайте также:  Ошибка busybox при запуске linux

Чтобы показать вместе со скрытыми папками:

Для вывода только имён директорий (возможны проблемы с директориями, имеющими пробелы в названиях):

6. С помощью find

Команда find имеет очень гибкие критерии поиска.

Чтобы вывести все папки без подпапок (замените /home/mial/bin/aur/ на интересующую папку):

find /home/mial/bin/aur/ -maxdepth 1 -type d

Чтобы вывести все папки с подбапками:

find /home/mial/bin/aur/ -type d

7. printf

Чтобы вывести все директории на отдельных строках (аналогично -1)

Предыдущий пример работает правильно с именами «-«, пробелами и переводами строк (newline).

Улучшенный пример, удаляет последний слэш (/), правильно работает с именами, содержащими пробелы и переводы строк:

Пример с функцией. Наконец, использование списка аргументов внутри функции не повлияет на список аргументов текущей запущенной оболочки:

8. tree

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

Но если мы хотим получить только каталоги, без дерева ascii и с полным путём из текущего каталога, вы можете сделать:

-d Список только каталогов. -f Печатает префикс полного пути для каждого файла. -i Делает так, что tree не печатать строки отступа, полезно, когда используется вместе с опцией -f.

И если вам нужен абсолютный путь, вы можете начать с указания полного пути к текущему каталогу:

А чтобы ограничить количество подкаталогов, вы можете установить максимальный уровень подкаталогов с уровнем -L, например:

9. Пример скрипта: выполнение действие только с каждой папкой в директории

Следующий скрипт показывает, как можно выполнить действие с каждой папкой в директории — имя каждой папки будет присваиваться переменной $line:

while read -r line ; do # echo $line # КОД # КОД # КОД done < <(ls -d */)

Чтобы выполнить действие с каждой папкой в директории /home/mial/bin/aur:

while read -r line ; do # echo $line # КОД # КОД # КОД done < <(ls -d /home/mial/bin/aur/*/)

Источник

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

Favorite

Добавить в избранное

Главное меню » Linux » Как вывести список только каталогов в Linux

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

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

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

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

Читайте также:  Linux get package version

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

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

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

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

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

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

[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:

Вот пример, когда мы выходим из каталога 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.

Читайте также:  Temp command in linux

Вы можете использовать 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 дает вам полную структуру каталогов. Вы можете изменить его, чтобы отображались только каталоги и только на текущем уровне.

  • 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, вы также можете использовать шаблон */ для вывода списка только каталогов в текущем рабочем каталоге.

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

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

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

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

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

Источник

Оцените статью
Adblock
detector