单独Gzip多个文件并保留原始文件

问题描述 投票:0回答:4

我希望将多个文件(到多个 .gz 文件)压缩到一个目录中,同时保留原始文件。

我可以使用这些命令来处理单个文件:

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

gzip *cache.html

但两者都没有保留原始内容。我试过了

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

但这仅生成了一个 {}.gz 文件。有没有简单的方法可以做到这一点?

linux compression gzip
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" \;

7
投票

-k, --keep
(gzip 1.6)

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


0
投票

由于您有多个文件,GNU Parallel 可能会很有用:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.