Extraiga y elimine todo .gz en un directorio - Linux

81

Tengo un directorio. Tiene alrededor de 500K archivos .gz.

¿Cómo puedo extraer todos los archivos .gz de ese directorio y eliminar los archivos .gz?

usuario2247643
fuente
Un .gzarchivo no tiene por qué ser necesariamente un archivo. En ese caso, no tendría nada que eliminar al realizar la ejecución gzip -d file.gz.
devnull
Estoy votando para cerrar esta pregunta como fuera de tema porque pertenece a unix.stackexchange.com
Shankar Damodaran

Respuestas:

169

Esto debería hacerlo:

gunzip *.gz
Adrian Dunn
fuente
1
... a menos que eso le dé un error 'argmuent demasiado grande'. En cuyo caso, querrá usar algo como find "$dir" -maxdepth 1 -name '*.gz' -print0 | xjobs -0 -l50 -v2 gunziprestringir las instancias a 50 argumentos cada una (y ejecutarlas en paralelo).
Toby Speight
22

@techedemic es correcto pero falta '.' para mencionar el directorio actual, y este comando recorre todos los subdirectorios.

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

Obviamente, hay más de una forma de hacer esto.

    # 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

Estoy seguro de que también hay otras formas, pero esta es probablemente la más sencilla.

Y para eliminarlo, simplemente haga un rm -rf *.gzen el directorio correspondiente

tecnico
fuente
3

Extraiga todos los archivos gz en el directorio actual y sus subdirectorios:

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

Si desea extraer un solo archivo, utilice:

gunzip file.gz

Extraerá el archivo y eliminará el archivo .gz.

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

Tratar:

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

Entonces intenta:

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

Esto descomprimirá todos los archivos .tar.gz en el directorio actual y luego eliminará todos los archivos .tar.gz. Si desea una explicación, el "|" toma la salida estándar del comando anterior y la usa como estándar del comando posterior. Utilice " comando man " sin las comillas para averiguar qué hacen esos comandos y argumentos. O puede investigar en línea.

usuario2921779
fuente