为什么不“找到”修剪我认为应该的方式?

Ave*_*han 3 unix find macos

我正在运行 MacOSX 10.5.8

我运行以下命令:

~/Sites/jjprof/trunk/content > find . -type d -name '*svn' -prune
./.svn
./resources/.svn
./resources/sitewide/.svn
./temporary/.svn
./users/.svn
./users/avatars/.svn
Run Code Online (Sandbox Code Playgroud)

我希望这个命令忽略所有 .svn 子目录;相反,它显示它们。

find . -name '*svn' -prune 
Run Code Online (Sandbox Code Playgroud)

做同样的事情。

Den*_*son 7

尝试这个:

find -type d -path '.svn' -prune -o -print
Run Code Online (Sandbox Code Playgroud)

man find下面的部分-name

要忽略目录及其下的文件,请使用 -prune; 请参阅说明中的示例
-path

在以下部分下-path

要忽略整个目录树,请使用-prune而不是检查树中的每个文件。例如,要跳过该目录 src/emacs 及其下的所有文件和目录,并打印找到的其他文件的名称,请执行以下操作:

             find . -path ./src/emacs -prune -o -print
Run Code Online (Sandbox Code Playgroud)

从“示例”部分:

但是,-prune操作本身返回 true,因此以下内容-o确保仅对未修剪的目录评估右侧(甚至未访问已修剪目录的内容,因此它们的内容无关紧要)。

  • 这确实是使用 `-prune` 的正确方法,也是一个很好的解释。然而,`-name .svn` 是选择`.svn` 子目录的正确方式(`-name '*svn' 或`-path '*svn'` 会匹配额外的文件)。 (2认同)
  • 这实际上不起作用。您需要使用 `'*/.svn'` 作为路径名;否则,它将不匹配`./.svn`、`./subdir/svn` 等等。 (2认同)