
Я хочу получить список каталогов внутри папки и вывести этот список в исполняемый файл, который использует их для запуска чего-либо.
По сути, этот 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
Обратите внимание, что они имеют префикс ./, что может представлять для вас проблему, а может и нет.
Также стоит прочитать: опция find -exec и find ..... {} +;