cbz ファイルから最初のファイルを 1 回のバッチで抽出する方法は?

cbz ファイルから最初のファイルを 1 回のバッチで抽出する方法は?

私は、コミック本のコレクションをコンピュータに保存していますが、そのほとんどは.cbzフォーマット (単なる ZIP アーカイブですが、名前が付けられています) で保存されています。最近、特定のコミック シリーズの表紙のコラージュを作成することにしましたが、そのためにはコミック本のアーカイブの最初のファイルが必要になります。

問題の詳細は次のとおりです。

  • .cbz1 つのフォルダーに75 個のファイル。
  • 各ファイルには のような名前が付けられ<series name> #<issue number>、問題番号は 1 から 75 まであります (1 つの問題: 01、02、03 などではないため、並べ替えで混乱が生じる可能性があります)。
    • 各アーカイブ内の各ファイルの名前は次のように付けられます。<issue name> <3-digit issue number with preceding zeros>
  • 必要に応じてアーカイブの名前を変更できます.zipが、7Zip (および他のいくつかのアーカイバ、ただし unrar は除く) が CBZ を十分に処理できることがわかっています。

必要なもの:

  • 75 個のアーカイブのそれぞれからの最初のファイル。ファイルにはすでに固有の名前が付けられているため、出力時に名前を変更する必要はありません。

私が持っているもの:

  • ウブントゥ 16.04
  • 7ジップ
  • インターネット接続

これを実現するにはどうすればよいですか? フォルダー内のすべてのアーカイブから最初のファイルを同じフォルダーに抽出するコマンドは何ですか?

答え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"

関連情報