【发布时间】:2012-04-28 12:58:56
【问题描述】:
我使用以下命令分别压缩文件夹中的每个文件:
for file in *; do gzip "$file"; done
但它保留了原始文件。我想知道是否有办法在文件被成功 gzip 后自动删除。
谢谢。
【问题讨论】:
我使用以下命令分别压缩文件夹中的每个文件:
for file in *; do gzip "$file"; done
但它保留了原始文件。我想知道是否有办法在文件被成功 gzip 后自动删除。
谢谢。
【问题讨论】:
我不明白您遇到的问题。根据gzip man page:
尽可能将每个文件替换为扩展名为 .gz 的文件,同时保持相同的所有权模式、访问和修改时间。
我唯一的猜测是您遇到了权限问题。确保您以您正在 gzip 压缩的文件的所有者身份登录。但是,在我机器上的 gzip 版本中,当我尝试 gzip 一个我不拥有的文件时,我会收到一个明显的 Operation not permitted 警告。操作仍然成功,但很清楚发生了什么。
【讨论】:
+1 给@Tim Pote 可能的原因。
在处理文件时要注意for 循环:如果文件名包含嵌入的空格,它将被视为两个单独的文件名。您可以像这样使用find 来避免这种情况:
find . -maxdepth 1 -type f ! -name '*.gz' -exec gzip "{}" \;
这会在当前目录中查找所有尚未压缩的常规文件,然后分别对每个文件调用 gzip。花括号 ({}) 替换为文件名,引号确保正确处理空格。
【讨论】:
-bash: *.gz: Command not found. ,如果我用撇号替换反引号,我得到参数列表太长的错误
如果你有几千个文件,为了防止“参数列表太长”错误使用
find . -maxdepth 1 -type f ! -name '*.gz' | while read file; do
gzip "$file"
done
【讨论】: