考虑到它们产生相同的结果,在命令中使用-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)