2009-04-25 6 views
24

Ho diverse directory che assomigliano a questo:comprimere i file più individualmente con Gzip

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

Per ciascuna di questa directory voglio comprimere i file al suo interno in formato * .gz quindi eliminare quelli non compressi. Così alla fine speriamo di ottenere qualcosa di simile:

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

C'è un modo semplice di Unix per farlo?

risposta

33
gzip */*.txt 

Ma l'estensione per ogni file sarà .txt.gz, come gzip usa per conoscere il nome del file originale.

+7

Solo per chiarimenti in quanto non è ovvio: gzip eliminerà i file non compressi. – ypnos

+0

c'è un modo per non cancellare gli originali? Attualmente sto usando il flag -c (gzip -9 -c style.css> style.css.gz) – ansiart

+0

Vedi http://stackoverflow.com/questions/6258972/gzip-multiple-files-individually-and-keep- i file originali –

8

gzip -r dir1 dir2

+0

Interessante; sicuramente funziona con la versione Cygwin. Non ero a conoscenza dell'opzione '-r' che si applica a gzip, ma non è nemmeno sorprendente. –

10

Di seguito funzionerà anche se si dispone di sub-directory. Per esempio. dir1/dir2 /.../ foo.txt

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

Si potrebbe anche fare 'gzip ./**/*. Txt', che ricorre in tutte le directory all'interno di quella corrente, gzipping di tutti i file di testo ed eliminazione degli originali. – thekingoftruth