Как вывести список каталогов и вывести их в Bash
Я хочу получить список каталогов внутри папки и вывести список в исполняемый файл, который использует их для запуска чего-либо.
В основном, для этого bash-файлов требуется список папок внутри моего $directory
, которые варьируются от @sub1
, @sub2
, @sub3
, а иногда и до 30. Все вложенные папки добавляются с @
условное обозначение.
В настоящее время я вручную добавляю подпапки в свой список и вызывается с помощью -sub="$subs"
где подпрограммы определены выше какsubs="$directory/@sub1;$directory/@sub2;
... так далее
Мне нужно поддерживать то же форматирование для вывода, что и для способа сборки исполняемого файла.
Какой лучший способ для автоматизации этого? Извините, если это немного странно, мой первый вопрос здесь.
1 ответ
Возможное решение: find . -type d -name '@*' -print0 -maxdepth 1 | xargs -0 yourprog
Пустая папка для начала, несколько папок с именем @subX, файл, который нам не нужен.
mkdir test
cd test
mkdir @sub1
mkdir @sub2
mkdir @sub3
mkdir subway
touch testfile
cd \@sub2
touch bar
mkdir @test
cd ..
Найти вещи и либо распечатать их в соответствии со стандартом, выполнить что-то с ними и тому подобное можно сделать с find
, Используйте это, а не пытайтесь анализировать вывод ls.
Первый аргумент - какую папку искать (например, find .
для текущего каталога)
-type d
фильтры только к каталогам (без файлов)
-name '@*'
любое совпадение, начинающееся с @
-print0
выведите результат в стандартный формат. -print также будет работать, но -print0 делает специальные вещи в случае пробелов и т. д.
-maxdepth 1
Не искать подпапки)
Результат find . -type d -name '@*' -print0 -maxdepth 1
в настройках сверху:
./@sub1./@sub2./@sub3
Обратите внимание, что перед ними стоит префикс./, который может быть проблемой для вас.
Также стоит прочесть: найти опцию -exec и найти..... {} +;