两个两个地压缩文件

两个两个地压缩文件

我有一个包含 800 个文件的目录,如下所示:

file1.png
[email protected]

file2.png
[email protected]

file3.png
[email protected]

... etc

我需要创建这样的 zip 文件

file1.zip (containing file1.png and [email protected])
file2.zip (containing file2.png and [email protected])
file3.zip (containing file3.png and [email protected])

我可以使用魔法命令来做到这一点吗?

答案1

如果总是有两个,很简单:

for f in file+([0-9]).png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done

请注意,上述内容将按原样从命令行运行。如果您打算在脚本中使用它,请将该行放在shopt -s extglob该行之前的某个位置。 (extglob默认情况下仅在交互式 shell 中启用。)

在旧的bash不处理扩展模式中,这个丑陋的解决方法会起作用,但最好改变逻辑正如另一个答案中所建议的作者:列昂尼德:

for f in file[0-9].png file*[0-9][0-9].png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done

答案2

对 manatwork 建议的内容进行稍微修改的版本怎么样?像这样的东西: for f in file*@2x.png; do zip ${f%@2x.png}.zip $f ${f/@2x./.}; done

它仅迭代“成对的第二个”文件,并且文件列表生成中没有正则表达式。

相关内容