Extrahieren und löschen Sie alle .gz in einem Verzeichnis - Linux

80

Ich habe ein Verzeichnis. Es hat ungefähr 500K .gz Dateien.

Wie kann ich alle .gz-Dateien in diesem Verzeichnis extrahieren und die .gz-Dateien löschen?

user2247643
quelle
Eine .gzDatei muss nicht unbedingt ein Archiv sein. In diesem Fall hätten Sie beim Ausführen nichts zu löschen gzip -d file.gz.
devnull
Ich stimme dafür,
Shankar Damodaran

Antworten:

168

Dies sollte es tun:

gunzip *.gz
Adrian Dunn
quelle
1
... es sei denn, dies führt zu einem "argmuent too big" -Fehler. In diesem Fall möchten Sie find "$dir" -maxdepth 1 -name '*.gz' -print0 | xjobs -0 -l50 -v2 gunzipInstanzen auf jeweils 50 Argumente beschränken (und sie parallel ausführen).
Toby Speight
22

@techedemic ist korrekt, fehlt aber '.' um das aktuelle Verzeichnis zu erwähnen, und dieser Befehl durchläuft alle Unterverzeichnisse.

find . -name '*.gz' -exec gunzip '{}' \;
elhaj
quelle
19

Es gibt offensichtlich mehr als einen Weg, dies zu tun.

    # This will find files recursively (you can limit it by using some 'find' parameters. 
    # see the man pages
    # Final backslash required for exec example to work
    find . -name '*.gz' -exec gunzip '{}' \;

    # This will do it only in the current directory
    for a in *.gz; do gunzip $a; done

Ich bin mir sicher, dass es auch andere Möglichkeiten gibt, aber dies ist wahrscheinlich die einfachste.

Und um es zu entfernen, führen Sie einfach eine rm -rf *.gzim entsprechenden Verzeichnis aus

techedemic
quelle
3

Extrahieren Sie alle gz-Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen:

 find . -name "*.gz" | xargs gunzip 
Jokerius
quelle
3

Wenn Sie eine einzelne Datei extrahieren möchten, verwenden Sie:

gunzip file.gz

Es wird die Datei extrahieren und die .gz-Datei entfernen.

Neelam
quelle
1
for foo in *.gz
do
  tar xf "$foo"
  rm "$foo"
done
Steven Penny
quelle
0

Versuchen:

ls -1 | grep -E "\.tar\.gz$" | xargs -n 1 tar xvfz

Dann versuche es:

ls -1 | grep -E "\.tar\.gz$" | xargs -n 1 rm

Dadurch werden alle .tar.gz-Dateien im aktuellen Verzeichnis entpackt und anschließend alle .tar.gz-Dateien gelöscht. Wenn Sie eine Erklärung wünschen, wird das "|" Nimmt das stdout des Befehls davor und verwendet es als stdin des Befehls danach. Verwenden Sie "man command " ohne Anführungszeichen, um herauszufinden, was diese Befehle und Argumente bewirken. Oder Sie können online recherchieren.

user2921779
quelle