Ich habe eine Sammlung von Comics, die ich auf meinem Computer speichere, meist im .cbz
Format (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
.cbz
Dateien 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>
- Jede Datei in jedem Archiv hat den Namen
- Archive können bei
.zip
Bedarf 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.sh
und 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 unzip
Folgendes verwenden:
unzip -j mycomic.cbz "First file within the archive.jpg"