我希望在保留原件的同时在目录中gzip多个文件(多个.gz文件)。
我可以使用以下命令执行单个文件:
find . -type f -name "*cache.html" -exec gzip {} \;
或
gzip *cache.html
但不保留原件。我试过了
find . -type f -name "*cache.html" -exec gzip -c {} > {}.gz
但是只创建了一个{} .gz文件。有一种简单的方法可以做到这一点吗?
答案 0 :(得分:9)
我会使用bash(1)
的简单for
构造:
for f in *cache.html ; do gzip -c "$f" > "$f.gz" ; done
如果我知道文件名是“理智的”,我会在论证周围留下""
,因为我很懒。我的文件名通常都是理智的。但剧本并没有这么奢侈。
答案 1 :(得分:9)
最后一个命令中的>
由运行find
的同一个shell解析。使用嵌套shell:
find . -type f -name "*cache.html" -exec sh -c "gzip < {} > {}.gz" \;
答案 2 :(得分:5)
<强> -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
答案 3 :(得分:0)
由于你有多个文件,GNU Parallel可能很有用:
find . -type f -name "*cache.html" | parallel gzip '<{} >{}.gz'
观看介绍视频以获得快速介绍: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1