2009-04-25 9 views
24

que tienen varios directorios que se ven así:comprimir múltiples archivos de forma individual con gzip

dir1/ 
    |_foo.txt 
    |_bar.txt 
dir2/ 
    |_qux.txt 
    |_bar.txt 

Para cada uno de este directorio Quiero comprimir los archivos dentro de ella en formato * .gz continuación, elimine los comprimidos. Así que finalmente esperamos obtener algo como esto:

dir1/ 
    |_foo.gz 
    |_bar.gz 
dir2/ 
    |_qux.gz 
    |_bar.gz 

¿Hay una manera simple de Unix de hacerlo?

Respuesta

33
gzip */*.txt 

Pero la extensión de cada archivo será .txt.gz, ya que gzip lo usa para conocer el nombre del archivo original.

+7

Solo por aclaración, ya que no es obvio: gzip eliminará los archivos descomprimidos. – ypnos

+0

¿hay alguna manera de no eliminar los originales? Actualmente estoy usando el distintivo -c (gzip -9 -c style.css> style.css.gz) – ansiart

+0

Ver http://stackoverflow.com/questions/6258972/gzip-multiple-files-individually-and-keep- los archivos originales –

8

gzip -r dir1 directorio2

+0

Interesante; Ciertamente funciona con la versión de Cygwin. No estaba al tanto de la opción '-r' que se aplica a gzip, pero tampoco es sorprendente. –

10

El siguiente trabajo, incluso si tiene subdirectorios. P.ej. dir1/dir2 /.../ foo.txt

find . -type f -name "*.txt" -exec gzip {} \; 
+1

También podría hacer 'gzip ./**/*. Txt', que vuelve a aparecer en todos los directorios dentro del actual, descomprime todos los archivos de texto y elimina los originales. – thekingoftruth

Cuestiones relacionadas