【问题标题】:How to gzip each file separately inside a folder and then if successful delete the original file如何在文件夹中分别压缩每个文件,然后如果成功删除原始文件
【发布时间】:2012-04-28 12:58:56
【问题描述】:

我使用以下命令分别压缩文件夹中的每个文件:

for file in *; do gzip "$file"; done

但它保留了原始文件。我想知道是否有办法在文件被成功 gzip 后自动删除。

谢谢。

【问题讨论】:

    标签: bash gzip


    【解决方案1】:

    我不明白您遇到的问题。根据gzip man page

    尽可能将每个文件替换为扩展名为 .gz 的文件,同时保持相同的所有权模式、访问和修改时间。

    我唯一的猜测是您遇到了权限问题。确保您以您正在 gzip 压缩的文件的所有者身份登录。但是,在我机器上的 gzip 版本中,当我尝试 gzip 一个我不拥有的文件时,我会收到一个明显的 Operation not permitted 警告。操作仍然成功,但很清楚发生了什么。

    【讨论】:

      【解决方案2】:

      +1 给@Tim Pote 可能的原因。

      在处理文件时要注意for 循环:如果文件名包含嵌入的空格,它将被视为两个单独的文件名。您可以像这样使用find 来避免这种情况:

      find . -maxdepth 1 -type f ! -name '*.gz' -exec gzip "{}" \;
      

      这会在当前目录中查找所有尚未压缩的常规文件,然后分别对每个文件调用 gzip。花括号 ({}) 替换为文件名,引号确保正确处理空格。

      【讨论】:

      • 我得到-bash: *.gz: Command not found. ,如果我用撇号替换反引号,我得到参数列表太长的错误
      • 谢谢!修正了错字。很好的收获,4年后。 :-)
      【解决方案3】:

      如果你有几千个文件,为了防止“参数列表太长”错误使用

      find . -maxdepth 1 -type f ! -name '*.gz' | while read file; do
          gzip "$file"
      done
      

      【讨论】:

        猜你喜欢
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 2019-02-02
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        • 2011-08-01
        • 1970-01-01
        相关资源
        最近更新 更多