命名压缩文件夹

命名压缩文件夹

我找到了如何压缩子文件夹中的所有文件夹的解决方案。

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/_}

相关内容