検索が見つかったディレクトリに移動するのをどのように防ぐことができますか?

検索が見つかったディレクトリに移動するのをどのように防ぐことができますか?

その中に含まれているファイルを再検索できるように、特定の文字列を含むすべてのディレクトリを探したいと思います。

./my-search-term/dir/my-search-termだから私はそのようなことに時間を無駄にしたくありません。

最初のmy-search-termディレクトリを探すときに再帰をどのように停止しますか?

答え1

タスク-prunefindディレクトリとして繰り返されません。たとえば、他のタスクと組み合わせることができます(-execどちらも実行される限り、順序は重要ではありません)。-prune-exec-prune

find . -name my-search-term -prune -exec find {} … \;

finda 内部に入れ子にするのはfind -exec少し問題になることがあります。ターミネータはexternalによってターミネータとして扱われるため、-exec内部では使用できません。この問題はシェルを呼び出すことで解決できますが、引用するときは注意してください。findfind

find . -name my-search-term -prune -exec sh -c '
    find "$@" … -exec … {\} +
' _ {} +

答え2

- ネイキッドソリューション -

find見つかったディレクトリの内容をスキップして別のディレクトリで検索を続けたい場合は、-prune@laebshadeの提案に従ってください。完全なコマンドは次のようになります。

 find . -type d -name somename -prune -exec ...

find一方、完全にしたい場合検索を停止一致する最初のディレクトリを見つけたら、探しているものは次のとおりです。-quit4.2.3(バージョンから使用可能GNU find)。これはfindすぐに終了するので、使用するのは少し面倒です。したがって、-quitコマンドの最後に配置する必要があります。

find . -type d -name somename -exec ... -quit

これが期待どおりに機能するためには、返品を保証する必要が-execあります。本物(つまり、若い状態)。-exec終了ステータスを無視して常に有効にするには、少し-quitトリックが必要です。

find . -type d -name somename \( -exec ... -o -true \) -quit

または

find . -type d -name somename \( -exec ... -o -quit \)

または

find . -type d -name somename \( -exec ... , -quit \) # a comma before -quit

-少し説明-

仕組みの中で最も重要なのはfind(「試験」)考慮論理述部左から右に説明します。したがって、-quit最後の操作は、前の部分全体が返されなかった場合にのみ実行されます(例:)間違った。デフォルトでは、すべてのテストは論理「AND」で接続されます。この-oオプションを使用すると、接続は「OR」に変更されます。

1つのトリッキーな要素は、コマンドを「最適化する」ことができ、-o入力するだけでその部分を実行しない可能性があることです。find-exec

find . -type d -name somename -exec ... -o -quit

この問題を解決するには、find「OR」で連結されたすべての述語を括弧で囲んで強制的に評価できます。

答え3

これがあなたが探しているものであるかどうかはわかりませんが、 "maxlength"オプションはfindコマンドが現在のディレクトリから離れることを許可しません。また、クエリにワイルドカードを追加することもできると思います。

$> find /your/dir -name '*mystring*' -maxdepth 1 -type d -exec my_action {} \;

- 名前私の文字列「一致するファイルをすべて検索」私の文字列'。一重引用符に注意してください。 -maxlength 1 は現在のディレクトリ内のファイルを探します。 -maxlength 2 は、現在のディレクトリとは異なるレベルのディレクトリなどでファイルを検索します。 -type d は、ディレクトリに属する​​ファイルを探します。 -type f 汎用ファイルなどを探します。

私の0.02...^_^

関連情報