Entfernen Sie Unterverzeichnisse / Unterordner aus Zip- und Rar-Dateien

Entfernen Sie Unterverzeichnisse / Unterordner aus Zip- und Rar-Dateien

Ich habe eine Menge .zip- und .rar-Dateien. Viele dieser Dateien enthalten Unterordner im Archiv. Ich möchte alle Ordner aus den Zip-Dateien entfernen, aber den restlichen Inhalt behalten.

z.B

original.zip
- /foo/bar1.jpg 
- /foo/bar2.jpg
- /foo/bar3.jpg
- /foo/bar4.jpg

>>>

new.zip
- bar1.jpg 
- bar2.jpg
- bar3.jpg
- bar4.jpg

Dies kann ein reiner Terminalbefehl oder ein Bash-Skript sein. Ich muss es auf Hunderten von Zip-/Rar-Dateien gleichzeitig ausführen können.

aktualisieren: Dies scheint nicht möglich zu sein, ohne die Zip- und RAR-Dateien neu zu erstellen.

Also habe ich ein kleines Bash-Skript geschrieben, das zwei Verzeichnisse erstellt: „cleaned“ für nachbearbeitete Dateien und „temp“ für die entpackten Dateien. Es durchläuft alle Archive im aktuellen Verzeichnis (.cbr- und .cbz-Dateien), erstellt einen „sauberen Namen“ für jede neue Datei, entpackt die alte Datei in das temporäre Verzeichnis, erstellt aus den temporären Dateien ein neues Archiv und speichert es unter dem sauberen Namen im „cleaned“-Verzeichnis. Anschließend wird der temporäre Ordner geleert. Nachdem alle Dateien verarbeitet wurden, wird das „temp“-Verzeichnis rekursiv entfernt. So sieht es aus:

#!/bin/bash
echo "comic cleaning!";
echo "---------------";
dir=$(pwd)/;
tmp=${dir}temp/;
clean=$(pwd)/cleaned;
cd $dir;
mkdir -p cleaned;
mkdir -p temp;
for z in *.cb*; do 
  cd $dir;
  filename=$(basename "$z");
  rawname="${filename%.*}";
  name="${rawname// /_}";
  7z e "$dir$z" -otemp/;
  cd $tmp && zip -r $clean/$name.cbz *.jpg;
  cd $tmp && rm *.*;
done
cd $dir && rm -rf $tmp;

Ich sollte wahrscheinlich das Verzeichnis /tmp des Betriebssystems verwenden, aber ich bin noch neu bei Bash und konnte es nicht zum Laufen bringen. Irgendwelche Vorschläge zur Optimierung?

Antwort1

Ihr kleines Skript funktioniert möglicherweise, wenn alle Dateinamen eindeutig sind. Werden Sie solche Bedingungen haben?

original.zip
- /foo/bar1.jpg 
- /foo/bar2.jpg
- /zoo/bar1.jpg
- /zoo/bar2.jpg

Sie werden Dateien überschreiben. Eine bessere Lösung wäre vielleicht, den vollständigen Pfad als Teil Ihres neuen Dateinamens anzugeben. Beispiel:

foobar1.jpg foobar2.jpg zoobar1.jpg zoobar2.jpg

Dabei geht jedoch der ursprüngliche Dateiname verloren.

Nur ein paar Gedanken …

verwandte Informationen