2009-04-25 69 views
24

我有几个目录,如下所示:压缩多个文件单独使用gzip

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

对于每一个在这个目录我想它里面的文件压缩成*。广州格式 然后删除那些未压缩的。所以最后我们希望得到这样的东西:

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

有没有一种简单的Unix方式来做到这一点?

回答

33
gzip */*.txt 

但是每个文件的扩展名都是.txt.gz,因为gzip使用它来知道原始文件名。

+7

只是澄清,因为它不是很明显:gzip将删除未压缩的文件本身。 – ypnos 2009-04-26 07:56:23

+0

有没有办法不删除原件?我目前正在使用-c标志(gzip -9 -c style.css> style.css.gz) – ansiart 2010-10-28 22:36:41

+0

请参阅http://stackoverflow.com/questions/6258972/gzip-multiple-files-individually-and-keep- the-original-files – 2011-06-06 23:35:55

10

即使您有子目录,以下方法仍然有效。例如。 dir1/dir2 /.../ foo.txt

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