如何從cbz檔案中批次提取第一個檔案?

如何從cbz檔案中批次提取第一個檔案?

我有一組漫畫書儲存在我的電腦上,大部分都是.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"

相關內容