我的 Linux 机器上有一个目录,里面有超过 10,000 个文件需要删除。正在运行...
sudo rm -rf /var/tmp/*
给出错误信息...
sudo: unable to execute /bin/rm: Argument list too long
解决方案是运行
sudo find /var/tmp | xargs sudo rm
这仅适用于文件名中没有空格的文件。但是,有些文件的名称中有空格,但不会被删除。例如,如果文件名为“名称中有空格的文件.dat”,则运行该命令会出现如下错误......
rm: cannot remove `/var/tmp/A': No such file or directory
rm: cannot remove `File': No such file or directory
rm: cannot remove `With': No such file or directory
rm: cannot remove `Spaces': No such file or directory
rm: cannot remove `in': No such file or directory
rm: cannot remove `the': No such file or directory
rm: cannot remove `Name.dat': No such file or directory
如何将完整的文件路径传递给 xargs sudo rm 而不破坏文件名。
答案1
告诉find
和xargs
使用不同的文件分隔符:
find /var/tmp -print0 | sudo xargs -0 rm
或者直接告诉find
执行rm
:
sudo find /var/tmp -exec rm {} +
或者find
直接删除文件:
sudo find /var/tmp -delete
注意:-mindepth 1
可能会有用,以避免删除/var/tmp
目录本身。
...或者实际上,只是丢下*
,如果您首先要使用递归模式,则无需。
sudo rm -rf /var/tmp
答案2
只是为了添加上一个答案以避免删除目录的问题:
find /var/tmp -type f -exec sudo rm {} +
find /var/tmp -depth -type d -exec sudo rmdir {} +
rmdir -p
也可以用来删除目录的所有后代,而不是使用-depth。