我想以递归方式从特定目录中删除文件。所以,我用过
find . -wholename "*.txt" -delete
我们也可以使用
删除文件rm -rf *.txt
使用rm
和find
??
答案 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仅匹配直接>的文件当前目录下的strong>(深度1)。
顺便说一下。您不需要-r
切换到rm
,除非您想递归删除目录(由于.txt
扩展名,我假设您只想删除常规文件)
答案 2 :(得分:1)
find
一起使用的 -delete
找到文件并删除它们。 Find
命令接受查找文件的路径,然后-delete
标志删除在给定路径中找到的文件。所以,你可以说find更多的是选择性删除
rm -rf
命令无论如何都以递归方式删除文件/目录。这意味着rm
将删除所有特定路径上的文件和目录。 -r
代表递归,-f
代表强制删除。因此,rm
加上-rf
将继续删除目标路径中目录中的目录和文件,直到找不到为止。