Ich habe ein Verzeichnis, in dem es mehrere Ordner gibt. Jeder Ordner enthält eine .gz-Datei. Wie kann ich alle auf einmal entpacken?
Meine Daten sehen folgendermaßen aus:
Liste der Ordner
A B C D
In jedem von ihnen befindet sich die Datei
A a.out.gz B b.out.gz C c.out.gz D d.out.gz
Kommentare
-
gunzip */*.gz
?
Antwort
Dies verwendet gunzip
, um alle Dateien in einem Ordner zu entpacken und die Endung .out.gz
gunzip */*.out.gz
zu haben. Dies führt zu einer „Schleife“ * durch alle Ordner, in denen sich eine komprimierte Datei befindet. Lassen Sie mich ein Beispiel hinzufügen:
A a.out.gz B b.out.gz C c.out.gz D d.out.gz E e.out
Verwenden Sie den obigen Befehl a.out.gz
b.out.gz
c.out.gz
d.out.gz
wird alle entpackt, aber e.out
da es nicht komprimiert ist.
* Dies wird als globbing oder Dateinamenerweiterung bezeichnet. Vielleicht möchten Sie hier mehr darüber lesen .
Kommentare
- Aber was ist, wenn ich mehrere Ordner habe, von denen jeder eine Zip-Datei enthält? Wie kann ich alle Ordner durchlaufen?
- Die
*/*.out.gz
schleift alle Ordner (' ist die*/
part) - @HoHoHo, wie mazs hervorheben, führt dies zu einer " Schleife ". Ich ' habe eine zusätzliche Erklärung und einen Link zu einer Seite hinzugefügt, auf der das Konzept näher erläutert wird 🙂
Antwort
find . -type f -name "*.gz" -execdir gunzip {} \;
Die Option execdir, um Ursachen zu finden, führt dazu, dass „find“ nacheinander in jedes Verzeichnis „cd“ wechselt und den Befehl exec (gunzip in) ausführt in diesem Fall) und dann „cd“ zurück zum cwd