我有一組漫畫書儲存在我的電腦上,大部分都是.cbz
格式的(只是 ZIP 存檔,但有一個奇特的名稱)。最近,我決定製作一個特定漫畫系列的封面拼貼畫,為此我需要漫畫書檔案中的第一個文件。
這是問題的分解:
.cbz
單一資料夾中有75 個檔案;- 每個文件都有一個類似於 的名稱
<series name> #<issue number>
,其中問題編號從 1 到 75(有一個問題:它不像 01、02、03 等,因此排序時可能會出現混亂);- 每個存檔中的每個檔案的名稱如下
<issue name> <3-digit issue number with preceding zeros>
- 每個存檔中的每個檔案的名稱如下
- 如有必要,存檔可以重命名為
.zip
,但我知道 7Zip(和其他一些存檔器,但不是 unrar)可以很好地處理 CBZ;
我需要的:
- 75 個檔案中每個檔案的第一個文件。這些文件已經具有獨特的名稱,因此無需在輸出時重新命名它們。
我擁有的:
- 烏班圖16.04
- 7Zip
- 網路連線
我怎樣才能做到這一點?什麼命令會將資料夾中每個存檔中的第一個檔案提取到同一資料夾?
答案1
如果您不需要重命名輸出文件,那麼我建議如下:
#!/bin/bash
for file in *.cbz
do
cover="`zipinfo -2 "$file" | awk 'NR==2 {exit} 1'`"
unzip -j "$file" "$cover"
done;
將其保存在類似的文件中script.sh
,並將其放入與漫畫相同的目錄中。然後給它執行權限:
chmod +x script.sh
並運行它:
./script.sh
它是如何運作的?
我們可以使用以下命令來取得 zip 檔案中所有檔案的清單zipinfo
:
zipinfo -2 mycomic.cbz
它輸出類似:
First file within the archive.jpg
Second file within the archive.jpg
...
然後使用awk 'NR==1 { print }'
我們可以返回第一個檔案名稱:First file within the archive.jpg
.
現在要提取該文件,我可以使用unzip
類似的方法:
unzip -j mycomic.cbz "First file within the archive.jpg"