从https://unix.stackexchange.com/a/81379/674
-path
不(重新)定义起始路径。它是指当前检查对象的起始路径和相对路径的组合。“起始路径”是否意味着
path
?find
: 的参数find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
“当前检查对象的起始路径和相对路径的组合”是什么意思?
例如,您可以通过此查找子目录中的所有文件,
src
无论在哪个级别。“查找子目录中的所有文件,
src
无论在哪个级别”是如何完成的?“不要特别对待 / 或 .”意味着
*
可以匹配两个文件名(包括扩展名)和子目录:[...]/file*
将匹配/file.txt
和/files/foo.bar
“不特别对待/或.”没有提到
*
,那么“不特别对待/或.”是否仅适用于*
?
答案1
是的,“开始路径”是指出现在命令开头附近
find
、选项之后但表达式之前的目录名称之一。我将您链接到的问题解释为表明OP对两者之间的区别感到困惑find /etc ...
和
find -path /etc ...
-
“它指的是当前检查对象的起始路径和相对路径的组合。”
我猜这个答案的作者想象你有一个名为 的目录
tools/crowbar
,其中包含文件drink
、food
、foolishness
和wisdom
。如果你说find tools/crowbar -path "*bar/foo*"
它将找到 和,但不会找到其他两个。
tools/crowbar/food
tools/crowbar/foolishness
-
我同意 lcd047 的观点。换句话说,如果你有一个像这样的目录结构
。 ├────猫 │ ├────狗 │ │ └────狗舍 │ └────tac │ └────src ├────目的地 ├────原创 │ ├────食谱 │ └────src └────源
然后
find . -path "*/src/*"
src
将在所有三个文件夹(及其所有子目录)中查找内容,而不报告cat
、cat/dog
、cat/dog/kennel
、cat/tac
、dest
、original
或中的内容original/recipe
。它有助于阅读整个段落,而不仅仅是挑选句子片段并期望它们单独有意义。
-path
测试中的讨论查找(1)说,-path pattern
- 文件名与 shell 模式匹配图案。元字符不特殊对待 '
/
' 或 '.
';所以,例如,寻找 。 -路径“./sr*sc”
将打印名为“ ”的目录的条目
./src/misc
(如果存在)。 ...好的,当您在同一行看到“文件名”、“shell 模式”和“元字符”时,您应该会想到 shell 的模式匹配/路径名扩展,它具有特殊的模式字符
*
,?
, 和[
...]
。 (“元字符”基本上是一个价值 10 美元的“特殊字符”单词。)然后它会向您显示一个*
其中包含 a 的示例!所以你应该能够弄清楚它在说什么。那么,它在说什么?看一下例子:
sr*sc
matchessrc/misc
。这与 shell 中的路径名扩展不同,在 shell 中您通常需要使用诸如match 之类的东西。而且,不,这不仅仅适用于; 并 以同样的方式工作。sr*/*sc
src/misc
*
-path "sr????sc"
-path "sr[cim/][cim/][cim/][cim/]sc"
他们懒得提及的是
-path "*sr*sc"
不仅会匹配src/misc
而且还会.src/misc
匹配src/.misc
;即使*sr*/*sc
通常不会匹配这些(在 shell 中),因为在 shell 的路径名扩展中,*
通常不匹配以.
。
答案2
为了避免混淆,您可能应该将原型想象成find(1)
这样:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [dir...] [expression]
find(1)
查找 中的文件dir
。 expression
是由应用于找到的文件的测试组成的逻辑表达式。 -path
、-name
、-type
是此类测试的示例。
上面基本上说
-path
does not setdir
,但它的参数被视为相对于dir
。说
-path '*src*'
匹配./src/foo/bar/test.c
和./foo/src/bar/test.c
,但不匹配./foo/bar/test.c
。said
*
是一个通配符,它可以跨目录匹配。它还说您不应该将其与*
DOS / Windows 世界混淆,在 DOS / Windows 世界中您需要编写*.*
以匹配具有“扩展名”的文件。
或者至少这是我的理解。