Bash

兩個兩個壓縮文件

  • November 21, 2012

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

file1.png
file1@2x.png

file2.png
file2@2x.png

file3.png
file3@2x.png

... etc

我需要像這樣創建 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)

有沒有我可以使用的魔法命令來做到這一點?

如果總是有兩個,很簡單:

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

請注意,上述內容將在命令行中按原樣工作。如果您打算在腳本中使用它,請放在shopt -s extglob該行之前的某個位置。(extglob預設情況下僅在互動式 shell 中啟用。)

在舊的不處理擴展模式中,這種醜陋的解決方法將起作用,但最好按照Leonid在另一個答案中的建議bash更改邏輯:

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

引用自:https://unix.stackexchange.com/questions/56212