2011-06-06 79 views
12

我期望在保留原件的同时在一个目录中gzip多个文件(成多个.gz文件)。分别对多个文件进行Gzip并保留原始文件

我可以使用这些命令的单个文件:

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

gzip *cache.html 

但也保留了原始。我试过

find . -type f -name "*cache.html" -exec gzip -c {} > {}.gz 

但是只做了{} .gz文件。有没有简单的方法来做到这一点?

回答

8

最后一个命令中的您的>由运行find的相同shell解析。使用嵌套的外壳:

find . -type f -name "*cache.html" -exec sh -c "gzip < {} > {}.gz" \; 
8

我会使用bash(1)的简单for构建这样的:

for f in *cache.html ; do gzip -c "$f" > "$f.gz" ; done 

如果我知道文件名是‘理智’,我会离开过身边的论据"",因为我很懒。而我的文件名通常是理智的。但剧本没有那么奢侈。