在Linux上删除文件名中有空格的多个文件

在Linux上删除文件名中有空格的多个文件

我的 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

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

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。

相关内容