Duc*_*uck 3 command-line bash zip wildcards
我有一个包含 800 个文件的目录,如下所示:
file1.png
file1@2x.png
file2.png
file2@2x.png
file3.png
file3@2x.png
... etc
Run Code Online (Sandbox Code Playgroud)
我需要创建这样的 zip 文件
file1.zip (containing file1.png and file1@2x.png)
file2.zip (containing file2.png and file2@2x.png)
file3.zip (containing file3.png and file3@2x.png)
Run Code Online (Sandbox Code Playgroud)
有没有我可以使用的魔法命令来做到这一点?
如果总是有两个,很简单:
for f in file+([0-9]).png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done
Run Code Online (Sandbox Code Playgroud)
请注意,上述内容将按原样从命令行工作。如果您打算在脚本中使用它,请将其shopt -s extglob放在该行之前的某个位置。(extglob默认情况下仅在交互式 shell 中启用。)
在旧的bash不处理扩展模式中,这种丑陋的解决方法将起作用,但更好地更改逻辑,如Leonid 的另一个答案中所建议的:
for f in file[0-9].png file*[0-9][0-9].png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done
Run Code Online (Sandbox Code Playgroud)