删除linux上的多个文件,文件名中有空格

b10*_*ard 1 linux ubuntu

我的 Linux 机器上有一个目录,里面有 10000 多个我必须删除的文件。跑步...

sudo rm -rf /var/tmp/*
Run Code Online (Sandbox Code Playgroud)

给出错误信息...

sudo: unable to execute /bin/rm: Argument list too long
Run Code Online (Sandbox Code Playgroud)

解决这个问题的方法是运行

sudo find /var/tmp | xargs sudo rm
Run Code Online (Sandbox Code Playgroud)

这仅适用于文件名中没有空格的文件。但是,某些文件的名称中带有空格,它们不会被删除。例如,如果一个文件名为“A File With Spaces in the Name.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
Run Code Online (Sandbox Code Playgroud)

如何将完整的文件路径传递给 xargs sudo rm 而不破坏文件名。

use*_*686 6

告诉findxargs使用不同的文件分隔符:

find /var/tmp -print0 | sudo xargs -0 rm
Run Code Online (Sandbox Code Playgroud)

或者告诉直接find执行rm

sudo find /var/tmp -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

或者告诉find只是删除文件:

sudo find /var/tmp -delete
Run Code Online (Sandbox Code Playgroud)

注意:-mindepth 1可能有用,以避免删除/var/tmp目录本身。

...或者真的,只需删除*,如果您首先要使用递归模式,则没有必要。

sudo rm -rf /var/tmp
Run Code Online (Sandbox Code Playgroud)