Unix 与x27之间的差异;查找-删除';和';rm-rf';?

Unix 与x27之间的差异;查找-删除';和';rm-rf';?,unix,delete-file,rm,Unix,Delete File,Rm,我想递归地删除特定目录中的文件。所以,我用了 find . -wholename "*.txt" -delete 我们还可以使用删除文件 rm -rf *.txt 使用rm和find删除文件有什么区别?查找-name abd.txt-delete尝试删除目录树中名为abd.txt的所有文件 find-wholename abd.txt-delete尝试删除目录树中某个位置的完整路径名为abd.txt的所有文件 这样的文件将永远不存在:当使用find.时,找到的文件的所有完整路径名都将以/开头

我想递归地删除特定目录中的文件。所以,我用了

find . -wholename "*.txt" -delete
我们还可以使用删除文件

rm -rf *.txt

使用
rm
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-深度\(-wholename./abd.txt-o-wholename./abd.txt/\*\)-delete

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


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

查找
-delete
一起使用,查找并删除文件
Find
命令在路径中查找文件,然后使用
-delete
标志删除在给定路径中找到的文件。因此,您可以说find更像是一种选择性删除


rm-rf
命令会递归地删除文件/目录,无论发生什么情况。这意味着
rm
将删除特定路径上的所有文件和目录
-r
表示递归,
-f
表示强制删除。因此,
rm
-rf
将继续删除目标路径上目录中的目录和文件,直到它找不到更多。

使用
find
可以更具体地说明要删除哪些文件,但最终都会对要删除的文件调用
unlink()
。好的。那么使用“查找-删除”和“rm-rf”进行删除有什么区别呢?使用
find…
还可以扫描子目录,而使用
rm
只扫描当前目录中的文件,而不扫描子目录中的文件。@MisterJack:with
-r
rm
也会删除子目录。@reinierpost我的评论是针对@Aashish P的。
-r
用于递归删除文件的内容(如果该文件是目录),而不是扫描子目录。@MisterJack:从技术上讲,文件的内容实际上不在该文件所在的目录内(目录只包含一个文件名和一个指向该文件的指针),因此实际发生的是一次删除所有内容的扫描,类似于
find.-depth-exec rm\{}+