Ich habe einen großen Ordner mit RAR-Archiven. Es gibt eine signifikante Hierarchie von Ordnerebenen. Ich möchte die gesamte Archivsammlung auf einmal entlarven.
Ich habe den folgenden Einzeiler, der funktionieren wird:
find -name "*.rar" -print0 | xargs -0 -n 1 -P 4 unrar x
(Beachten Sie, dass wir vier Threads gleichzeitig ausführen, um den Vorgang zu beschleunigen. :-))
Das Problem bei diesem Befehl ist, dass xargs für jede RAR-Datei im obersten Verzeichnis ausgeführt wird. Dies bedeutet, dass die gesamte Ausgabe in den Ordner der obersten Ebene verschoben wird.
Stattdessen soll die Ausgabe im selben Ordner wie das RAR-Archiv vorhanden sein.
Beispiel:
Top level
|--FolderA
|----File1.rar
|----File2.rar
|--FolderB
|----File1.rar
|----File2.rar
|----File3.rar
|--FolderC
|----File1.rar
|----File2.rar
Jede der "File1.rar" -Dateien enthält eine Datei mit demselben Namen. Das Extrahieren aller Dateien in den Ordner der obersten Ebene führt daher zu Überschreibproblemen.
Zusammenfassend möchte ich alle RAR-Dateien in der obigen Hierarchie extrahieren. Ich möchte, dass der Inhalt jeder RAR-Datei in dem Ordner vorhanden ist, in dem sich die RAR-Datei befindet.
Es scheint mir, dass die Lösung darin besteht, das Arbeitsverzeichnis irgendwie festzulegen und dann das unrar-Befehlsformular dort auszuführen. Da mir der Befehl find jedoch Dateinamen und keine Verzeichnisse gibt, kann ich so etwas nicht tun
| xargs -I{} -n 1 -P 4 cd {} \; unrar x {}
Gibt es einen besseren Weg, dies zu erreichen, als ein Perl- oder Python-Skript zu schreiben, das den Befehl unrar umgibt und den angegebenen Pfad in seine Teile aufteilt und den Befehl ausführt?