如何在文件夹中单独对每个文件进行gzip压缩,然后如果成功,删除原始文件。

3

我使用以下命令将文件夹中的每个文件单独压缩:

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

但它会保留原始文件。我想知道是否有一种方法可以在成功压缩后自动删除这些文件。

谢谢。

3个回答

5
我不明白你遇到的问题。根据gzip手册的说法:
“尽可能地,每个文件都被一个扩展名为.gz的文件所取代,同时保持相同的所有权模式、访问和修改时间。”
我唯一猜测的是你遇到了权限问题。确保你以文件的所有者身份登录并进行压缩。然而,在我的机器上的gzip版本中,当我尝试压缩一个我不拥有的文件时,我会收到一个明显的“操作不允许”的警告。操作仍然成功,但很清楚发生了什么。

3

给@Tim Pote加一分,因为他的猜测很有可能是问题的原因。

但是请小心处理文件时的for循环,如果文件名包含空格,则会被视为两个不同的文件名。您可以通过以下方式使用find来避免这种情况:

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

这个命令可以在当前目录中找到所有未被压缩的普通文件,然后对每一个文件进行单独压缩,使用的工具是gzip。花括号({})会被替换为文件名,双引号则确保空格被正确处理。


1
我得到了“-bash: *.gz: 命令未找到。”如果我将反引号替换为撇号,我会得到参数列表太长的错误。 - rubo77
谢谢!修正了拼写错误。好发现,四年后。 :-) - Adam Liss

0
如果您有数千个文件,为了防止出现“参数列表过长”的错误,请使用:
find . -maxdepth 1 -type f ! -name '*.gz' | while read file; do
    gzip "$file"
done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接