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