我想递归地从特定目录中删除文件。所以,我使用了
find . -wholename "*.txt" -delete
我们也可以使用以下方式删除文件:
rm -rf *.txt
rm
和 find
删除文件的区别是什么?
我想递归地从特定目录中删除文件。所以,我使用了
find . -wholename "*.txt" -delete
我们也可以使用以下方式删除文件:
rm -rf *.txt
rm
和 find
删除文件的区别是什么?
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
是一个非空目录,则删除操作将失败。rm -rf abd.txt
也尝试删除当前目录中的 abd.txt
,如果它是一个非空目录,则会将其及其中的所有内容全部删除。find
实现这个功能,您可以使用以下命令:
find . -depth \( -wholename ./abd.txt -o -wholename ./abd.txt/\* \) -delete
find ...
命令可以扫描子目录,而使用 rm
命令只能扫描当前目录中的文件,不能扫描子目录。 - Alessandro Vendruscolorm
命令也会删除子目录。 - reinierpost-r
用于递归删除文件的内容,如果该文件是一个目录,则会删除其子目录中的内容。 - Alessandro Vendruscolo-name
和-wholename
之间的差异 :-( - reinierpost虽然 find -wholename GLOBPATTERN
尝试匹配当前目录下的每个文件(与深度无关),但您在 rm
命令中使用的 glob 仅针对当前目录下直接(深度为1)的文件进行匹配。
顺便提一下,除非您想递归删除目录(由于扩展名为.txt
,我假设您只想删除常规文件),否则不需要使用 -r
开关来执行 rm
命令。
find
与 -delete
结合使用,可以查找并删除文件。 find
命令需要输入要查找文件的路径,然后使用 -delete
标志删除在该路径下找到的文件。因此,我们可以说 find 更像是一种选择性删除。rm -rf
命令会递归地删除所有文件/目录,而不管它们是什么。这意味着 rm
将删除指定路径下的所有文件和目录。其中,-r
表示递归,-f
表示强制删除。因此,将 rm
与 -rf
结合使用时,它会继续删除目标路径中的目录和目录中的文件,直到没有更多的文件为止。
find
命令可以更加精确地选择要删除的文件,但两者最终都会调用unlink()
函数 man 手册 删除指定的文件。 - Wernsey