Bash:找到-depth和-prune来提供cpio

时间:2012-01-24 16:14:52

标签: bash find

我正在构建一个备份脚本,其中某些目录不应包含在备份存档中。

cd /;
find . -maxdepth 2 \ 
    \( -path './sys' -o -path './dev' -o -path './proc' -o -path './media' -o -path './mnt' \) -prune \
-o -print

这只找到我想要的文件和目录。

问题是cpio应该使用以下选项,以避免在恢复文件时出现权限问题。

find ... -depth ....

如果我添加-depth选项,则返回的文件和目录包含我想要避免的内容。

我真的不理解查找手册中的这些句子:

-prune True;  if  the  file is a directory, do not descend into it. If
              -depth is given, false; no  effect.   Because  -delete  implies
              -depth, you cannot usefully use -prune and -delete together.

1 个答案:

答案 0 :(得分:1)

我引用了本教程中的一段,可能会更好地理解-prune find选项。

  

了解如何防止发现走得太远非常重要。   在这种情况下,重要的选项是-prune。这个选项让人困惑,因为它总是如此。它具有重要的副作用。如果正在查看的文件是目录,则它不会沿着目录向下移动。下面是一个列出目录中所有文件但不查看顶层子目录中任何文件的示例:

find * -type f -print -o -type d -prune
  

这将打印所有普通文件并在所有目录中删除搜索。要打印除源代码管理目录中的文件以外的文件,请使用:

find . -print -o -name SCCS -prune
  

如果排除-o选项,SCCS目录将与其他文件一起打印。

Source