2009-04-25 10 views
24

mam kilka katalogów, które wyglądają tak:Compress wiele plików indywidualnie z Gzip

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

dla każdego z tego katalogu chcę skompresować pliki wewnątrz go do formatu * .gz następnie usunąć nieskompresowane nich. W końcu mamy nadzieję uzyskać coś takiego:

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

Czy istnieje prosty sposób uniksowy to zrobić?

Odpowiedz

33
gzip */*.txt 

Ale rozszerzenie dla każdego pliku będzie .txt.gz, ponieważ gzip używa go do poznania oryginalnej nazwy pliku.

+7

Tylko dla wyjaśnienia, ponieważ nie jest to oczywiste: gzip sam usunie nieskompresowane pliki. – ypnos

+0

Czy istnieje sposób, aby nie usuwać oryginałów? Obecnie używam flagi -c (gzip -9 -c style.css> style.css.gz) – ansiart

+0

Zobacz http://stackoverflow.com/questions/6258972/gzip-multiple-files-individually-and-keep- the-original-files –

8

gzip -r dir1 dir2

+0

Interesujące; na pewno działa z wersją Cygwin. Nie wiedziałem o opcji "-r" dotyczącej gzip, ale też nie jest to zaskakujące. –

10

Następujące będzie działać, nawet jeśli masz podkatalogów. Na przykład. dir1/dir2 /.../ foo.txt

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

Można również zrobić polecenie "gzip ./**/*. Txt", które powraca do wszystkich katalogów w bieżącym, gzipowanie wszystkich plików tekstowych i usuwanie oryginałów. – thekingoftruth