我想要在一个目录中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文件。是否有简单的方法可以实现此目的?
我想要在一个目录中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文件。是否有简单的方法可以实现此目的?
我会使用 bash(1)
的简单 for
结构来实现这个:
for f in *cache.html ; do gzip -c "$f" > "$f.gz" ; done
如果我知道文件名是“正常的”,那么我会在参数周围省略""
,因为我很懒。而我的文件名通常都是正常的。但脚本没有这种奢侈。
在最后一个命令中,你的>
会被运行find
的同一个shell解析。使用嵌套的shell:
find . -type f -name "*cache.html" -exec sh -c "gzip < {} > {}.gz" \;
-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保留原始文件?由于您有多个文件,GNU Parallel 可能会很有用:
find . -type f -name "*cache.html" | parallel gzip '<{} >{}.gz'