find 命令的参数

pka*_*mol 1 find options

考虑到它们产生相同的结果,在命令中使用-print-depth参数有什么区别find

/home/pkaramol/Desktop/testdir
$ find . 
.
./testfile3.txt
./testfile1.txt
./testfile4.txt
./testdir1
./testfile2.txt
./testdir2
/home/pkaramol/Desktop/testdir
$ find . -depth 
./testfile3.txt
./testfile1.txt
./testfile4.txt
./testdir1
./testfile2.txt
./testdir2
.
/home/pkaramol/Desktop/testdir
$ find . -depth -print
./testfile3.txt
./testfile1.txt
./testfile4.txt
./testdir1
./testfile2.txt
./testdir2
.
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 10

-print将确保当前路径名打印到标准输出。某些标志会关闭路径名的默认打印(-exec例如)。

-depth将导致文件层次结构的深度优先遍历,因此首先处理没有子目录的目录中的路径名(自下而上而不是自上而下)。在您的示例中,当您在没有子目录的目录中工作时,它几乎没有区别,但请注意,在您使用时在其他路径名之后.报告(这是因为是要搜索的最顶层目录,因此其路径名最后处理为首先没有)。-depth.-depth-depth

-depth如果正在删除目录,则使用它很有用,find因为如果没有它,您将因尝试访问已删除的目录而出错。

正如 Scott 在下面的评论中指出的那样,您在重命名目录时肯定也需要,否则您可能无法在重命名目录的同时遍历目录结构。-depth

-delete标志-depth默认开启。


示例:删除当前目录下名称匹配的所有目录*deleteme(例如folder-deleteme),并打印成功删除目录的路径:

find . -depth -type d -name '*deleteme' -exec rm -rf {} ';' -print
Run Code Online (Sandbox Code Playgroud)

鉴于以下目录结构,

$ tree
.
`-- folder-deleteme
    `-- another-deleteme
        `-- evenmore-deleteme

3 directories, 0 file
Run Code Online (Sandbox Code Playgroud)

执行上述find命令,而不 -depth将导致

$ find . -type d -name '*deleteme' -exec rm -rf {} ';' -print
./folder-deleteme
find: ./folder-deleteme: No such file or directory
Run Code Online (Sandbox Code Playgroud)

因为find删除最顶层的folder-deleteme目录(并打印其路径),然后尝试输入它以查找要删除的其他目录。

还:

$ find .
.
./folder-deleteme
./folder-deleteme/another-deleteme
./folder-deleteme/another-deleteme/evenmore-deleteme

$ find . -depth
./folder-deleteme/another-deleteme/evenmore-deleteme
./folder-deleteme/another-deleteme
./folder-deleteme
.
Run Code Online (Sandbox Code Playgroud)