关于 -path for find 的更多问题

Tim*_*Tim 2 find

来自https://unix.stackexchange.com/a/81379/674

  1. -path不(重新)定义起始路径。它是指当前检查对象的起始路径和相对路径的组合。

    • “起始路径”是否意味着path? find:的参数

      find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
      
      Run Code Online (Sandbox Code Playgroud)
    • “当前检查对象的起始路径和相对路径的组合”是什么意思?

  2. 例如,您可以通过此查找子目录中的所有文件,src无论在哪个级别。

    “查找子目录中的所有文件,src无论在哪个级别”是如何完成的?

  3. “不要特别对待 / 或 .”意味着*可以匹配两个文件名(包括扩展名)和子目录:[...]/file* 将匹配/file.txt/files/foo.bar

    “不特别对待/或.”没有提到*,那么“不特别对待/或.”是否仅适用于*

G-M*_*ca' 5

    \n
  1. 是的,“开始路径”表示出现在命令开头附近find、选项之后但表达式之前的目录名称之一。\xc2\xa0\n我将您链接到的问题解释为建议 OP\ n对之间的区别感到困惑

    \n
    find /etc ...\n
    Run Code Online (Sandbox Code Playgroud)\n

    \n
    find -path /etc ...\n
    Run Code Online (Sandbox Code Playgroud)\n
    \n
      \n
    • \n
      \n

      “它指的是当前检查对象的起始路径\n和相对路径的组合。”

      \n
      \n

      我猜这个答案的作者正在想象\n你有一个名为 的目录tools/crowbar,\n其中包含文件drinkfoodfoolishnesswisdom。\xc2\xa0\nIf\xc2\xa0you\xc2\xa0say

      \n
      find tools/crowbar -path "*bar/foo*"\n
      Run Code Online (Sandbox Code Playgroud)\n

      它会找到\nand ,但不会找到其他两个。tools/crowbar/foodtools/crowbar/foolishness

      \n
    • \n
    \n
  2. \n
  3. 我同意lcd047。\xc2\xa0\n换句话说,如果你有一个像这样的目录结构

    \n
    .\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80cat\n\xe2\x94\x82\xe2\x94\x9c\xe2\x94\x80\xe2\ x94\x80\xe2\x94\x80dog\n\xe2\x94\x82\xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80kennel\n\ xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80tac\n\xe2\x94\x82\xe2\x94\x94\xe2\x94\x80\ xe2\x94\x80\xe2\x94\x80src\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80dest\n\xe2\x94\x9c\xe2\x94\ x80\xe2\x94\x80\xe2\x94\x80原始\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80配方\n\xe2\ x94\x82\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\ x94\x80src
    \n

    然后

    \n
    find . -path "*/src/*"\n
    Run Code Online (Sandbox Code Playgroud)\n

    src将在所有三个文件夹\n(及其所有子目录)\n中查找内容,而不报告catcat/dogcat/dog/kennel、\n cat/tacdestoriginal或中的内容original/recipe

    \n
  4. \n
  5. 它有助于阅读整个段落,\n而不仅仅是挑选句子片段\n并期望它们单独有意义。\xc2\xa0\nfind (1)-path中测试的讨论\n说,

    \n
    \n

    -path pattern

    \n
      文件名与 shell 模式模式匹配。\xc2\xa0\n元字符不会特殊对待 \xe2\x80\x98 /\xe2\x80\x99\nor \xe2\x80\x98 .\xe2\x80\x99;因此,例如\n
        寻找 。-路径“./sr*sc”
        \n

        ./src/misc将打印名为 \xe2\x80\x98 \xe2\x80\x99\n(如果存在)的目录的条目。\xc2\xa0 ...

        \n

      \n

      好的,当您看到“文件名”、“shell 模式”和“元字符”都在同一行时,\n您\xe2\x80\x99 会想到 shell\xe2\x80\x99s 模式匹配 /\ npathname 扩展,具有特殊模式字符\n *?[... ]。\xc2\xa0\n(“元字符”基本上是“特殊字符”的 10 美元单词。)\xc2\xa0\n然后它会显示你给个例子,*里面有 a!\xc2\xa0\n所以你应该能够弄清楚它\xe2\x80\x99s 在说什么。

      \n

      那么,它在说什么?\xc2\xa0\n看一下示例:sr*scmatches src/misc。\n这与 shell 中的路径名扩展不同,\n您通常需要使用\n类似于match 的内容。\xc2\xa0\ n并且,不,这不适用于\xe2\x80\x99t 仅适用于;\n和\n以相同的方式工作。sr*/*scsrc/misc*-path "sr????sc"-path\xc2\xa0"sr[cim/][cim/][cim/][cim/]sc"

      \n

      他们不\xe2\x80\x99懒得提及的是-path "*sr*sc"\n不仅会匹配src/misc而且还会.src/misc匹配src/.misc;\n尽管通常*sr*/*sc不会\xe2\x80\x99t匹配那些(在shell中)\n因为,在shell\xe2 \x80\x99s 路径名扩展,\n*通常与 \xe2\x80\x99 不匹配以 \xc2\xa0 开头的名称.

      \n
    • \n
    \n