AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 453127
Accepted
John Gowers
John Gowers
Asked: 2018-07-03 16:20:09 +0800 CST2018-07-03 16:20:09 +0800 CST 2018-07-03 16:20:09 +0800 CST

为什么我们使用 `find -depth` 和 `cpio`

  • 772

从info cpio页面:

如果要归档整个目录树,find 命令可以将文件列表提供给 cpio:

 % find . -print -depth | cpio -ov > tree.cpio

'-depth' 选项强制'find' 在打印目录本身之前打印目录中的条目。这通过在目录名称本身之前打印目录中的目录条目来限制限制性目录权限的影响。

最后一部分是什么意思?在目录名称本身之前打印目录中的目录条目如何限制限制性目录权限的影响?

find cpio
  • 2 2 个回答
  • 1289 Views

2 个回答

  • Voted
  1. Best Answer
    schily
    2018-07-03T21:38:27+08:002018-07-03T21:38:27+08:00

    大多数cpio实现都是愚蠢的,并且在解压缩档案时不管理目录权限。

    如果一个目录没有写访问权,并且 cpio 归档按通常的顺序 from find,则该目录将位于归档中的第一个cpio并首先从cpio归档中解压缩。当这样一个“只读”目录被解压缩并被赋予权限时,当稍后在存档中看到目录内容并将被解压缩时,它没有权限将文件放入其中。

    • 这个cpio问题的一个解决方案是创建档案,其中目录的内容在前,相关的目录在内容之后。这会导致使用默认权限创建cpio缺少的目录(如果调用它-d以创建缺少的目录),从存档中提取文件,稍后,当在存档中看到该目录时,将权限设置为“只读”。

    • 另一种解决方案是使用一个愚蠢的实现提取存档cpioas root,因为root即使在只读目录中也允许创建文件。

    • 第三种解决方案是使用内部仿真cpio等现代实现。记住存档中的目录权限,但首先创建具有中间写入权限的目录。在存档中的文件被提取到具有中间写权限的目录之后,记住的真实目录权限被延迟设置。cpiostarstarstar

    • 2
  2. slm
    2018-07-03T18:20:45+08:002018-07-03T18:20:45+08:00

    手册页的 OSX(因此也是 BSD)版本find声明如下:

     -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 不允许完全读取/执行而不允许创建较低级别的目录特权。

    • -depth选项(实际上是一个始终为真的标准)强制输出为深度优先- 即首先是文件,然后是包含它们的目录。当目录具有限制性权限时,这会有所帮助,并且首先恢复目录可能会阻止文件恢复(并且在任何情况下都会更改目录上的时间戳)。通常,find 先返回目录,然后再返回该目录中的任何文件。

    参考

    • find 的 -depth 选项是否暗示深度优先树遍历?
    • Unix find 教程 控制树遍历的附加方法
    • 0

相关问题

  • 如果未引用 -name 后面的模式,则 find 的奇怪行为

  • 将变量从子shell打印到父shell [重复]

  • 检查某个文件夹是否存在于某个目录中

  • 从命令行查找和替换 CSS 文件中的颜色

  • GNU find:在-exec中获取绝对和相对路径

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve