11

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

find . -wholename "*.txt" -delete

我们也可以使用删除文件

rm -rf *.txt

rm使用和删除文件有什么区别find??

4

3 回答 3

9

find . -name abd.txt -delete尝试删除abd.txt目录树中某处命名的所有文件.

find . -wholename abd.txt -delete尝试删除abd.txt目录树中某处具有完整路径名的所有文件.

永远不会存在这样的文件:使用 时find .,找到的所有文件的完整路径名都将以 开头./,因此即使当前目录中名为的文件abd.txt也将具有 path ./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

于 2012-07-02T11:02:32.253 回答
3

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

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

于 2012-07-02T12:47:40.160 回答
2

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

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

于 2017-12-19T06:35:23.787 回答