使用 for 循环删除目录中的所有内容

使用 for 循环删除目录中的所有内容

我正在尝试使用以下命令从我的服务器中删除大量邮件(主要是邮件发送失败)

 rm -rf /home/*/mail/new/*

我越来越-bash: /usr/bin/rm: Argument list too long

我尝试使用查找

find /home/*/mail/new/ -mindepth 1 -delete

但20分钟后,它似乎没有做任何事情。

如何使用 for 循环删除其中的所有内容(目录、文件、点文件)/home/*/mail/new/

像这样的东西

for f in /home/*/mail/new/*.*~; do
        # if it is a file, delete it
    if [  -f $f ]
    then
        rm "$f"
    fi
done

请帮我重写这个命令来删除文件和文件夹以及其中的所有内容/home/*/mail/new/

编辑:我的问题很独特,因为它是关于在 FOR 循环中执行此操作。

答案1

问题是/home/*/mail/new/*扩展为太多文件名。最简单的解决方案是删除该目录:

rm -rf /home/*/mail/new/

或者,使用您的find命令。应该可以,只是速度会慢一些。

或者,如果您需要new目录,请使用循环来查找它们,删除并重新创建它们:

for d in /home/*/mail/new/; do
    rm -rf "$d" && mkdir "$d"
done

您尝试编写的循环(但不要使用它,它非常慢且效率低下)类似于:

for f in /home/*/mail/new/* /home/*/mail/new/.*; do
    rm -rf "$f"
done

如果您想删除所有内容,则无需测试文件,只需使用rm -rf即可通过同一命令删除目录和文件。它会抱怨不能删除...但你可以忽略它。或者,如果您想要超级干净并避免错误,您可以在 bash 中执行此操作:

shopt -s dotglob
for f in /home/*/mail/new/*; do
        rm -rf "$f"
done

相关内容