我找到了如何压缩子文件夹中的所有文件夹的解决方案。
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
如果可能的话,但我找不到在 Bash 脚本中执行此操作的方法。
答案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/_}