find 的 -depth 选项是否意味着深度优先树遍历?

lee*_*d00 9 find

据我了解-depth,该find命令的选项会导致在树结构的深度优先遍历期间在离开目录的路上发生指定的操作(也许我理解错了)。

如果没有-depth指定选项,它通常会在深度优先遍历完成之前执行操作,还是执行目录的广度优先遍历并首先正常运行操作?

Ste*_*itt 14

find使用深度优先策略(与广度优先相反),无论是否-depth指定。-depth仅保证子目录在其父目录之前处理。

一个简单的例子:

mkdir -p a/{1,2,3} b c
find .
Run Code Online (Sandbox Code Playgroud)

产生

.
./a
./a/2
./a/1
./a/3
./b
./c
Run Code Online (Sandbox Code Playgroud)

然而

find . -depth
Run Code Online (Sandbox Code Playgroud)

产生

./a/2
./a/1
./a/3
./a
./b
./c
.
Run Code Online (Sandbox Code Playgroud)

如果你想要广度优先搜索,你可以使用bfswhich 是find.