Wie kann ich mehrere gzip-Dateien in Verzeichnissen und Unterverzeichnissen extrahieren?

10

Ich habe beide gzipund gunzipBefehle ausprobiert , aber ich bekomme beide

gunzip *.gz 
gzip: invalid option -- 'Y' 

gunzip -S-1800-01-01-000000-g01.h5.gz  
gzip: compressed data not read
 from a terminal. Use -f to force decompression. For help, type: gzip -h

Wenn ich die -fOption ausprobiere , dauert es sehr lange, eine einzelne Datei zu bearbeiten, und der Befehl wird nicht erfolgreich ausgeführt. Vermisse ich etwas

Herman Toothrot
quelle
1
Enthält das Verzeichnis .gz-Dateien, deren Namen mit Bindestrichen beginnen, z -Y.something.gz. In diesem --gunzip -- *.gz
Fall
@steeldriver ja ich habe ein paar Dateien beginnend mit -
Herman Toothrot
das verursachte mindestens eines der beiden Probleme.
Herman Toothrot

Antworten:

15

Sie können den folgenden Befehl verwenden.

Wechseln Sie in das Verzeichnis, in dem sich Ihre .gzDatei befindet, und führen Sie den folgenden Befehl aus:

for f in *.gz ; do gunzip -c "$f" > /home/$USER/"${f%.*}" ; done

Es extrahiert alle Dateien mit dem ursprünglichen Namen und speichert sie im aktuellen Benutzer-Ausgangsverzeichnis ( /home/username). Sie können es woanders ändern.

EDIT:

gunzip *.gz

Dieser Befehl funktioniert auch. Standardmäßig wird jedoch die Originaldatei ersetzt.

pl_rock
quelle
Hast du gelesen, was ich in meiner Frage geschrieben habe? gunzip * .gz funktioniert bei mir nicht. Aber die for-Schleife funktioniert, ich bin verwirrt.
Herman Toothrot
aber es funktioniert für mich und andere auch, warum "ungültige Option -" Y "angezeigt wird. Ich denke, entweder ist Ihr Dateiformat nicht in Ordnung oder Sie vermissen etwas im Befehl.
pl_rock
4

Option 1 : Entpacken Sie mehrere Dateien mit einem einfachen Anführungszeichen (Kurzversion).

gunzip '*.gz'

Beachten Sie, dass das *.gzWort zwischen zwei einfache Anführungszeichen gesetzt wird, sodass die Shell es nicht als Platzhalterzeichen erkennt.

Option 2 : Entpacken Sie mehrere Dateien mit der Shell for-Schleife (lange Version).

for g in *.gz; do gunzip $g; done

Die Quelle

EDIT:

Ich habe gerade versucht:

gunzip -dk *.gz

und es hat funktioniert.

-dzu dekomprimieren und kOriginaldateien zu behalten.

Bilal
quelle
Haben Sie gunzip ‘*.gz’ diesen Befehl überprüft ? Ich kann diesen Befehl nicht ausführen. es gibt Fehler.
pl_rock
benutze gunzip '*.gz'nicht gunzip ‘*.gz’ ( ' 'nicht `'` `)
Bilal
Ich kopiere nur das Einfügen Ihres Befehls und es gibt gzip: *.gz: No such file or directoryneue auch nicht funktioniert. Hast du es versucht?
pl_rock
Es funktioniert nicht gunzip '* .gz' gzip: * .gz: Keine solche Datei oder Verzeichnis
Herman Toothrot
Entschuldigung, ich habe es nicht versucht! Ich bin gerade auf Windows :(
Bilal
0

Linux-Benutzer:

Verwenden Sie den folgenden Befehl, um die Mindestanzahl von .gz-Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen zu extrahieren

gunzip *.gz

Verwenden Sie den folgenden Befehl, um eine beliebige Anzahl von GZ-Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen zu extrahieren

sudo find . -name "*.gz" | xargs gunzip
kmsvignesh
quelle