- Как вывести список только директорий используя ls в Bash
- 1. С помощью ls увидеть все папки кроме скрытых
- 2. С помощью ls увидеть все папки вместе со скрытыми
- 3. С помощью ls и cut
- 4. Используя echo
- 5. Используя ls и grep
- 6. С помощью find
- 7. printf
- 8. tree
- 9. Пример скрипта: выполнение действие только с каждой папкой в директории
- Как вывести список только каталогов в Linux
- Используйте команду ls для вывода только списка каталогов
- Список только подкаталогов в определенном каталоге
- Используйте комбинацию команды ls и grep
- Используйте команду поиска, чтобы вывести список только каталогов
- Используйте команду tree для вывода списка только каталогов
- Использование команды echo для вывода списка каталогов
Как вывести список только директорий используя 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. Этот способ имеет ограничение — папки должны выводиться в виде подробного списка:
Чтобы показать вместе со скрытыми папками:
Для вывода только имён директорий (возможны проблемы с директориями, имеющими пробелы в названиях):
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
Добавить в избранное
Главное меню » Linux » Как вывести список только каталогов в Linux
К оманда ls в Linux используется для вывода содержимого любого каталога.
По умолчанию в нем отображается все содержимое, будь то файл, каталог, ссылка или именованный канал.
Но что, если вы хотите перечислить только каталоги?
Как и все в 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.
Вы можете использовать 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.