Я пытаюсь перейти от моего Времнного создания сценария, который перебирает все ребенок дома проекта, и создает соответствующий почтовый файл для каждого:Makefile: Создание архивных файлов всех вложенных папок
for i in */; do
if [[ -d $i ]]; then
echo "Processing folder $i";
zip "${i%/}.zip" "$i"*.txt
echo "Created ${i%/}.zip"
fi
done;
Первая строка неудобная, но она просто перебирает все поддиры, исключая скрытые. Как вы видите, логика проста, но делать это в Makefile без явного указания каждого подкаталога представляется сложным.
В идеале мы должны начать с:
project
subdir1
file1.txt
file2.txt
subdir2
file3.txt
... и в конечном итоге с:
project
subdir1
file1.txt
file2.txt
subdir1.zip
subdir2
file3.txt
subdir2.zip
Есть ли способ безопасно получить этот вид рекурсии из косметики?
редактировать: Вымытый базовый сценарий, благодаря Этан
Ваш оригинальный сценарий небезопасен для каталогов с пробелами или метасимволами оболочки только FYI. Использование 'for i в * /; do' было бы. Внутренняя находка может иметь схожие проблемы с пробелами/новыми символами в именах файлов в зависимости от того, как 'zip' обрабатывает свой вход. Если ваше дерево не глубоко вложено с помощью 'zip '$ i.zip" "$ i"/*. Txt'/etc. вместо этого безопаснее. –
Вы можете просто поместить этот точный скрипт в цель своего файла makefile, если хотите. –
@EtanReisner Спасибо за комментарии к скрипту (будет его редактировать). Я знаю, что могу просто бросить это в Makefile, но думал, что может быть «правильный» способ сделать это в синтаксисе make. – Zac