【问题标题】:Gzip multiple files individually and keep the original files单独Gzip多个文件并保留原始文件
【发布时间】:2011-06-06 23:02:01
【问题描述】:

我希望在一个目录中压缩多个文件(到多个 .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


    【解决方案1】:

    我会为此使用bash(1) 的简单for 构造:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        -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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-06-09
            • 2020-02-16
            • 2021-07-11
            • 1970-01-01
            • 2016-03-05
            • 2019-06-24
            • 1970-01-01
            相关资源
            最近更新 更多