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