-d Cause find to perform a depth-first traversal, i.e., directories
are visited in post-order and all entries in a directory will
be acted on before the directory itself. By default, find visits
directories in pre-order, i.e., before their contents. Note,
the default is not a breadth-first traversal.
This option is equivalent to the -depth primary of IEEE Std
1003.1-2001 (``POSIX.1''). The -d option can be useful when find
is used with cpio(1) to process files that are contained in
directories with unusual permissions. It ensures that you have
write permission while you are placing files in a directory,
then sets the directory's permissions as the last thing.
最后一句解释了为什么,好一些???
切换的目的-depth是强制find深入它找到的每个目录,直到它到达“叶节点”,然后将其打印。
注意:强制-depth子目录在其父目录之前处理。
通过使用该-depth开关,您可以保证在find将父目录转发到可能过于严格的命令时不会被绊倒cpio,并且由于您的用户 ID 不允许完全读取/执行而不允许创建较低级别的目录特权。
大多数
cpio
实现都是愚蠢的,并且在解压缩档案时不管理目录权限。如果一个目录没有写访问权,并且 cpio 归档按通常的顺序 from
find
,则该目录将位于归档中的第一个cpio
并首先从cpio
归档中解压缩。当这样一个“只读”目录被解压缩并被赋予权限时,当稍后在存档中看到目录内容并将被解压缩时,它没有权限将文件放入其中。这个
cpio
问题的一个解决方案是创建档案,其中目录的内容在前,相关的目录在内容之后。这会导致使用默认权限创建cpio
缺少的目录(如果调用它-d
以创建缺少的目录),从存档中提取文件,稍后,当在存档中看到该目录时,将权限设置为“只读”。另一种解决方案是使用一个愚蠢的实现提取存档
cpio
asroot
,因为root
即使在只读目录中也允许创建文件。第三种解决方案是使用内部仿真
cpio
等现代实现。记住存档中的目录权限,但首先创建具有中间写入权限的目录。在存档中的文件被提取到具有中间写权限的目录之后,记住的真实目录权限被延迟设置。cpio
star
star
star
手册页的 OSX(因此也是 BSD)版本
find
声明如下:最后一句解释了为什么,好一些???
切换的目的
-depth
是强制find
深入它找到的每个目录,直到它到达“叶节点”,然后将其打印。注意:强制
-depth
子目录在其父目录之前处理。通过使用该
-depth
开关,您可以保证在find
将父目录转发到可能过于严格的命令时不会被绊倒cpio
,并且由于您的用户 ID 不允许完全读取/执行而不允许创建较低级别的目录特权。参考