-path for findに関する追加質問[閉じる]

-path for findに関する追加質問[閉じる]

~からhttps://unix.stackexchange.com/a/81379/674

  1. -path開始パスを(再)定義しないでください。現在の検査対象の開始経路と相対経路の組み合わせをいう。

    • 「開始パス」とは、次のパラメータを意味しますかpathfind

      find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
      
    • 「現在確認されたオブジェクトの開始パスと相対パスの組み合わせ」とはどういう意味ですか?

  2. srcたとえば、この機能を使用すると、レベルに関係なくサブディレクトリ内のすべてのファイルを見つけることができます。

    src「レベルに関係なく、サブディレクトリ内のすべてのファイルを検索する」はどのように行われますか?

  3. 「/または.を特別に扱わないでください」とは、*ファイル名(拡張子を含む)とサブディレクトリの両方が一致できること[...]/file* を意味します/file.txt/files/foo.bar

    「特別な処置なし/または」が記載されていない*ため、「特別な処置なし/または」はのみ適用されますか*

答え1

  1. はい、「開始パス」は、コマンドの先頭find、オプションの後、式の前に表示されるディレクトリ名の1つです。私はあなたがリンクした質問をOPが2つの違いについて混同していることを示していると解釈します。

    find /etc ...
    

    そして

    find -path /etc ...
    

    • 「現在検査対象の開始経路と相対経路の組み合わせを指します。」

      この回答の作成者は、およびファイルをtools/crowbar含むというディレクトリがあると想像します。言うならdrinkfoodfoolishnesswisdom

      find tools/crowbar -path "*bar/foo*"
      

      合計は見つかりますが、他の2つは見つかりません。tools/crowbar/foodtools/crowbar/foolishness

  2. 私はlcd047に同意します。つまり、次のようなディレクトリ構造を持っていると

    
    ├────猫
    │ ├────犬
    │ │ └────犬小屋
    │ └────택
    │ └────src
    ├────目的地
    ├────オリジナル
    │ ├────レシピ
    │ └────src
    └────ソース

    それから

    find . -path "*/src/*"
    

    srccat、、、、、またはのコンテンツを報告せずに、3つの フォルダすべて(およびcat/dogすべてのサブディレクトリ)でコンテンツを検索します。cat/dog/kennelcat/tacdestoriginaloriginal/recipe

  3. 文章の一部だけを選んで個別に意味があると期待するよりも、全段落を読む方が役立ちます。-pathテスト中の議論検索(1)説明する、

    -path pattern

      ファイル名がシェルパターンと一致します。模様。メタ文字は「/」または「」を特別に処理しません.。たとえば、次のようになります。
          探す。 -パス「./sr*sc」

      ./src/misc""というディレクトリが存在する場合は、そのディレクトリのエントリを印刷してください。 ...

    [OK]、同じ行に「ファイル名」、「シェルパターン」、および「メタ文字」が表示されている場合は、特殊パターン文字を含むシェルのパターン一致/パス名の拡張を考える必要があります。 *?[...]。 (「メタ文字」は基本的に「特殊文字」の$ 10単語です。)次の*例が表示されます。だから何を言うのかを理解できるはずです。

    それで、それはどういう意味ですか?例を見てください:sr*scmatch src/misc。これは通常、 match などを使用する必要があるシェルのパス名拡張とは異なります。そしていいえ、これは同じ方法で適用されるわけではありません。sr*/*scsrc/misc*-path "sr????sc"-path "sr[cim/][cim/][cim/][cim/]sc"

    彼らが言及していないのは、シェルのパス名拡張で通常(シェルで)一致しない場合でも、一致するだけでなく一致-path "*sr*sc" することです。 src/misc.src/miscsrc/.misc*sr*/*sc*.

答え2

find(1)混乱を避けるために、プロトタイプを次のように考える必要があります。

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [dir...] [expression]

find(1)ファイルを見つけますdirexpression見つかったファイルに適用されるテストで構成される論理式。 -path、、、-name-typeそのようなテストの例です。

  1. 上記はデフォルトでは-path設定されていませんが、その引数はdir相対的に処理されますdir

  2. -path '*src*'一致します./src/foo/bar/test.c./foo/src/bar/test.c、一致しません./foo/bar/test.c

  3. これは*ディレクトリ全体で一致するワイルドカードです。また、これを「拡張子」を持つファイルと一致するように*作成する必要があるDOS / Windowsの世界と混同しないでください。*.*

または少なくともそれは私の理解です。

関連情報