Именование заархивированных папок

Я нашел решение о том, как архивировать все папки в подпапке.

for i in */*; do zip -r "${i%/}.zip" "$i"; done

Проблема состоит в том, что я хочу назвать .zip папки следующим образом: parentFolder_zippedFolder.zip, но я хочу поддержать структуру кода, показанную выше, если это возможно. Я хотел бы, чтобы это было похоже

for i in */*; do zip -r "parentFolderName"" + ${i%/}.zip" "$i"; done

если это возможно, но я не мог бы найти способ сделать это в сценарии удара.

1
задан 19 December 2016 в 18:59

1 ответ

Учитывая структуру папок, подобную этой:

./parent
./parent/child1
./parent/child1/data1
./parent/child2
./parent/child2/data2

Выполнение этой команды: for i in */*; do zip -r "${i/\//_}.zip" "$i"; done создаст следующие файлы:

./parent_child1.zip
./parent_child2.zip

Содержимое такое же, как с командой в вашем вопросе, с именами, как вы просили их.

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

${i/\//_} является заменой bash, которая заменяет символ / внутри переменной i на символ _. Поскольку символ / является особым в bash, мы должны избежать его, давая \/. Если бы мы заменили букву t, подстановка была бы ${i/t/_}.

1
ответ дан 7 December 2019 в 15:43

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

Похожие вопросы: