#bash #loops #unix #syntax #subdirectory
Вопрос:
У меня есть функция, которая берет файл, выполняет некоторые операции и создает кучу выходных файлов. У меня есть 100 вложенных папок с именами:
d066, d067, d068.... d165, d166
У каждого из них есть только 1 файл. Что я хочу сделать, так это зайти в каждую вложенную папку, взять имя файла, применить к нему функцию, оставить вложенную папку, ввести следующую и так далее.
Я написал этот сценарий:
for i in {60..166}; do
if [ $i -lt 100 ];
then
var2=d0$i
else
var2=d$i
fi
cd $var2 || exit
f=$(find . -type f)
gd2e.py -rnxFile $f
cd ..
done
Проблема в том, что мой код выходит из папки, содержащей подпапку, и останавливается. Кто-нибудь знает лучший способ сделать это ?
Комментарии:
1. Пожалуйста, добавьте подходящий shebang (
#!/bin/bash
), а затем вставьте свой скрипт в shellcheck.net и постарайтесь выполнить содержащиеся там рекомендации.2. До сих пор похоже, что ошибки в заклинаниях, которые я допустил, были причиной того, что он не работал. Спасибо @markp-fuso за более быстрый способ сделать это ! Это также хорошо работает. Я бы хотел выбрать ваш комментарий в качестве ответа, но, поскольку вы только прокомментировали, у меня нет возможности принять его
Ответ №1:
Предполагая, что функция может работать с directoy как часть входного параметра (например, gd2e.py -rnxFile ${i}/${f}
), несколько идей по оптимизации текущего кода:
while read -r f
do
gd2e.py -rnxfFile "${f}"
done < <(find d{060..166} -type f)
Если в d{060..166}
каталогах могут быть подкаталоги, которые вы не хотите сканировать, мы можем добавить a -maxdepth 1
в find
:
while read -r f
do
gd2e.py -rnxfFile "${f}"
done < <(find d{060..166} -maxdepth 1 -type f)