Bash 如何在一个文件夹中分别gzip每个文件,然后如果成功删除原始文件

Bash 如何在一个文件夹中分别gzip每个文件,然后如果成功删除原始文件,bash,gzip,Bash,Gzip,我使用以下命令分别压缩文件夹中的每个文件: for file in *; do gzip "$file"; done 但它保留了原始文件。我想知道是否有一种方法可以在成功gzip后自动删除这些文件 谢谢。我不明白你的问题。根据报告: 只要有可能,每个文件都会被一个扩展名为.gz的文件替换,同时保持相同的所有权模式、访问和修改时间 我唯一的猜测是你有权限问题。确保您是以gzip文件的所有者身份登录的。然而,在我的机器上的gzip版本中,当我尝试gzip一个我不拥有的文件时,我得到了一个明显的操作

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

for file in *; do gzip "$file"; done
但它保留了原始文件。我想知道是否有一种方法可以在成功gzip后自动删除这些文件


谢谢。

我不明白你的问题。根据报告:

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


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

+1到@Tim Pote查找可能的原因

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

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

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

如果有数千个文件,以防止“参数列表过长”错误使用

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

我得到
-bash:.gz:找不到命令如果我用撇号替换反勾号,我得到的参数列表太长了,谢谢!修正了打字错误。好渔获量,4年后。:-)