3

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

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

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

谢谢。

4

3 回答 3

5

我不明白你遇到的问题。根据gzip 手册页

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

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

于 2012-04-28T13:13:09.280 回答
3

为可能的原因向@Tim Pote +1。

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

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

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

于 2012-04-28T13:53:55.243 回答
0

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

find . -maxdepth 1 -type f ! -name '*.gz' | while read file; do
    gzip "$file"
done
于 2016-03-10T14:27:33.433 回答