Linux命令用空格删除目录

我通常使用下面的命令行来删除文件系统上的目录。 但是,第一次find空白名称, rm不认识它。

 find . -name .AppleDouble* -exec rm -rf {} \; 

它会抛出以下错误: find: './Aerosmith/Young Lust/.AppleDouble': No such file or directory

是否可以使用像这样的一条线来实现它? 或者我应该使用某种脚本? 如果脚本是解决scheme,请你能举个例子吗?

你要

 find <whatever> -print0 | xargs -0 rm -rf 

与人们首先想到的问题相反,你所遇到的问题不在于文件名中的空格。 {}将正确地将文件名传递给rm。 你遇到的问题是, find ,默认情况下是先繁殖,而不是先深入。 find rm命令正在做什么,所以在rm ,find会试图然后cd到你刚才删除的目录中,并且你得到了一个文件找不到的错误,因为它试图cd到的目录没有了。

@ womble的答案工作,因为它延迟删除目录。 它将search目录中的其他内容,首先从目录中删除。 这是无效的,因为无论如何,如果你要删除整个目录,那么在目录中寻找要删除的文件是愚蠢的。

在GNU find中,你可以使用-delete动作:

 find . -name .AppleDouble* -delete 

发现将足够聪明,做正确的事情。

 find . -name .AppleDouble* -exec rm -rf {} + 

(使用+代替;终止命令)相当于使用xargs的@ womble命令,它会产生缓冲动作的效果,直到它扫描整个目录或者在命令行上运行到rm的空间外,从同样的问题,因为它是无用的search文件删除,肯定会被删除。