1

Я хочу получить список каталогов внутри папки и вывести список в исполняемый файл, который использует их для запуска чего-либо.

В основном, для этого bash-файлов требуется список папок внутри моего $directory , который варьируется от @sub1 , @sub2 , @sub3 sub3 и иногда до 30. Все подпапки добавляются с символом @ .

В настоящее время я вручную добавляю подпапки в свой список и вызывается с -sub="$subs" , где sub определен выше как subs="$directory/@sub1;$directory/@sub2; ... и т.д.

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

Какой лучший способ для автоматизации этого? Извините, если это немного странно, мой первый вопрос здесь.

1 ответ1

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 и найдите ..... {} +;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .