Как вывести список каталогов и вывести их в 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 и найти..... {} +;

Другие вопросы по тегам