'find -delete'和'rm -rf'之间的区别?

时间:2012-07-02 10:47:58

标签: unix delete-file rm

我想以递归方式从特定目录中删除文件。所以,我用过

find . -wholename "*.txt" -delete

我们也可以使用

删除文件
rm -rf *.txt

使用rmfind ??

删除文件有什么区别

3 个答案:

答案 0 :(得分:7)

find . -name abd.txt -delete尝试删除abd.txt

目录树中某处名为.的所有文件

find . -wholename abd.txt -delete尝试删除abd.txt

目录树中某个位置为.的完整路径名的所有文件

不存在此类文件:使用find .时,找到的所有文件的完整路径名都将以./开头,因此即使当前目录中名为abd.txt的文件也会有路径./abd.txt,但不匹配。

find . -wholename ./abd.txt -delete 删除名为abd.txt的当前目录中的文件。

find -wholename ./abd.txt -delete也会这样做。

如果abd.txt是非空目录,则删除将失败。

(我刚尝试使用GNU find 4.6.0进行上述操作;其他版本可能表现不同。)

rm -rf abd.txt也尝试删除当前目录中的abd.txt,如果它是非空目录,它将删除它及其中的所有内容。

要使用find执行此操作,您可以使用

find . -depth \( -wholename ./abd.txt -o -wholename ./abd.txt/\* \) -delete

答案 1 :(得分:3)

虽然find -wholename GLOBPATTERN尝试匹配当前目录下的每个文件(与深度无关),但您使用rm命令时使用的glob仅匹配直接的文件(深度1)。

顺便说一下。您不需要-r切换到rm,除非您想递归删除目录(由于.txt扩展名,我假设您只想删除常规文件)

答案 2 :(得分:1)

find一起使用的

-delete找到文件并删除它们。 Find命令接受查找文件的路径,然后-delete标志删除在给定路径中找到的文件。所以,你可以说find更多的是选择性删除

rm -rf命令无论如何都以递归方式删除文件/目录。这意味着rm将删除所有特定路径上的文件和目录。 -r代表递归,-f代表强制删除。因此,rm加上-rf将继续删除目标路径中目录中的目录和文件,直到找不到为止。