如何在文件夹中单独gzip每个文件,然后如果成功删除原始文件

时间:2012-04-28 12:58:56

标签: bash gzip

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

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

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

感谢。

3 个答案:

答案 0 :(得分:5)

我不明白你遇到的问题。根据{{​​3}}:

  

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

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

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:0)

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

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