-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
.
答案1
-print
将确保当前路径名打印到标准输出。某些标志会关闭路径名的默认打印(-exec
例如)。
-depth
将导致文件层次结构的深度优先遍历,因此首先处理没有子目录的目录中的路径名(自下而上而不是自上而下)。在您的示例中,当您在没有子目录的目录中工作时,这几乎没有什么区别,但请注意.
报告的内容后使用时的其他路径名-depth
(这是因为.
这是要搜索的最顶层目录,因此其路径名最后使用 处理,-depth
首先不使用-depth
)。
-depth
如果要删除目录,则使用它很有用,find
因为如果没有它,尝试访问已删除的目录时会出现错误。
正如斯科特在下面的评论中指出的那样,你会确实需要-depth
时重命名目录也一样,否则您可能无法在重命名目录结构的同时遍历目录结构。
该标志默认-delete
打开。-depth
示例:删除当前目录下名称匹配的所有目录*deleteme
(例如folder-deleteme
),并打印成功删除目录的路径:
find . -depth -type d -name '*deleteme' -exec rm -rf {} ';' -print
给定以下目录结构,
$ tree
.
`-- folder-deleteme
`-- another-deleteme
`-- evenmore-deleteme
3 directories, 0 file
执行上面的find
命令没有 -depth
会导致
$ find . -type d -name '*deleteme' -exec rm -rf {} ';' -print
./folder-deleteme
find: ./folder-deleteme: No such file or directory
因为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
.