find命令的参数

find命令的参数

-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
.

相关内容