Wie extrahiere ich die erste Datei in einem Stapel aus CBZ-Dateien?

Wie extrahiere ich die erste Datei in einem Stapel aus CBZ-Dateien?

Ich habe eine Sammlung von Comics, die ich auf meinem Computer speichere, meist im .cbzFormat (das nur ein ZIP-Archiv ist, aber mit einem schicken Namen). Vor kurzem habe ich beschlossen, eine Collage der Cover einer bestimmten Comicserie zu erstellen, für die ich die erste Datei im Comicarchiv benötigen würde.

Hier ist die Aufschlüsselung des Problems:

  • 75 .cbzDateien in einem einzigen Ordner;
  • Jede Datei hat einen Namen wie <series name> #<issue number>, wobei die Ausgabenummern von 1 bis 75 gehen (ein Problem: es ist nicht wie 01, 02, 03 usw., deshalb kann es hier zu Verwirrung beim Sortieren kommen);
    • Jede Datei in jedem Archiv hat den Namen<issue name> <3-digit issue number with preceding zeros>
  • Archive können bei .zipBedarf umbenannt werden, aber ich weiß, dass 7Zip (und einige andere Archivierungsprogramme, aber nicht unrar) mit CBZ gut genug umgehen können;

Was ich brauche:

  • Die erste Datei aus jedem der 75 Archive. Die Dateien haben bereits eindeutige Namen, daher ist es nicht nötig, sie bei der Ausgabe umzubenennen.

Was ich habe:

  • Ubuntu 16.04
  • 7Zip
  • Internetverbindung

Wie mache ich das? Welcher Befehl extrahiert die erste Datei aus jedem Archiv in einem Ordner in denselben Ordner?

Antwort1

Wenn Sie die Ausgabedateien nicht umbenennen müssen, schlage ich Folgendes vor:

#!/bin/bash

for file in *.cbz
do
 cover="`zipinfo -2 "$file" | awk 'NR==2 {exit} 1'`"
 unzip -j "$file" "$cover"
done;

Speichern Sie es in einer Datei wie script.shund legen Sie es in dasselbe Verzeichnis wie Ihre Comics. Geben Sie ihm dann die Ausführungsberechtigung:

chmod +x script.sh

Und führen Sie es aus:

./script.sh

Wie funktioniert es?

Wir können eine Liste aller Dateien in einem ZIP-Archiv erhalten, indem wir Folgendes verwenden zipinfo:

zipinfo -2 mycomic.cbz

Die Ausgabe ist ungefähr wie folgt:

First file within the archive.jpg
Second file within the archive.jpg
...

Dann awk 'NR==1 { print }'können wir den ersten Dateinamen zurückgeben, nämlich: First file within the archive.jpg.

Um diese Datei jetzt zu extrahieren, kann ich unzipFolgendes verwenden:

unzip -j mycomic.cbz "First file within the archive.jpg"

verwandte Informationen