我使用以下命令分别压缩文件夹中的每个文件:
for file in *; do gzip "$file"; done
但它保留了原始文件。我想知道是否有办法在成功压缩文件后自动删除文件。
感谢。
答案 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