分别Gzip多个文件并保留原始文件

我正在寻找gzip多个文件(到多个.gz文件)在一个目录中,同时保留原件。

我可以使用这些命令来执行单个文件:

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

要么

 gzip *cache.html 

但是既不保留原文。 我试过了

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

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

Solutions Collecting From Web of "分别Gzip多个文件并保留原始文件"

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

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

我会用bash(1)这个简单for构造:

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

如果我知道文件名是“理智的”,我会放弃这个论点,因为我很懒。 而我的文件名通常是理智的。 但脚本没有那么奢侈。

-k, --keep

gzip 1.6(2013年6月)添加了-k, --keep选项,现在您可以:

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

或递归地简单地为所有文件:

 gzip -kr . 

找到: https : //unix.stackexchange.com/questions/46786/how-to-tell-gzip-to-keep-original-file

既然你有多个文件,GNU并行可能是有用的:

 find . -type f -name "*cache.html" | parallel gzip '<{} >{}.gz' 

观看介绍视频快速介绍: https : //www.youtube.com/playlist?list=PL284C9FF2488BC6D1