单独对多个文件进行gzip压缩并保留原始文件。

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文件。是否有简单的方法可以实现此目的?

4个回答

10

我会使用 bash(1) 的简单 for 结构来实现这个:

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

如果我知道文件名是“正常的”,那么我会在参数周围省略"",因为我很懒。而我的文件名通常都是正常的。但脚本没有这种奢侈。


9

在最后一个命令中,你的>会被运行find的同一个shell解析。使用嵌套的shell:

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

6

-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

如何告诉gzip保留原始文件?
我使用以下命令压缩文件:
gzip -c file.txt > file.txt.gz
这个命令会产生一个名为file.txt.gz的文件,但是它会删除原始的file.txt文件。我该如何在压缩后保留原始文件?

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接