2

これはRHEL5.6であり、GNUfind4.2.27です。

検索からディレクトリを除外しようとしていますが、ディレクトリが子孫になっていないことを確認したいと思います。-pruneがこれを行う-と言っている投稿をたくさん見ましたが、そうです。このコマンドを実行できます:

find . -type d -name "./.snapshot*" -prune -o -print

そしてそれは動作します。straceを実行して、.snapshotに下降していないことを確認します。

また、特定のレベルでのみディレクトリを検索したいと思います。これを行うには、mindepthとmaxdepthを使用できます。

find . -maxdepth 8 -mindepth 8 -type d

そしてそれは私に.snapshotにあるものを含む8レベル下のすべてのdirsを与えます。

pruneオプションとmindepthオプションおよびmaxdepthオプションを組み合わせる場合:

find . -maxdepth 8 -mindepth 8 -type d \( -path "./.snapshot/*" -prune -o -print \)

出力は正しいです-.snapshotにあるものを除いて、すべてのdirが8レベル下に表示されますが、straceを介して検索を実行すると、.snapshotはまだレベル1から8に下降していることがわかります。

さまざまな組み合わせを試しました。優先順位の括弧を移動し、式のコンポーネントを調整しました。適切な出力を生成するものはすべて、.snapshotに分類されます。

マニュアルページでは、-pruneは-depthでは機能しないことがわかりますが、mindepthとmaxdepthについては何も述べていません。

誰かアドバイスはありますか?

ありがとう...ビル

4

2 に答える 2

2

これがあなたの答えだと思います。-mindepthは、そのレベルまですべてのテストをオフにしているようです。ちょっと残念です。

(「manfind」から)

   -mindepth levels
          **Do not apply any** tests or actions at levels less than levels (a non-negative integer).
          '-mindepth 1' means process all  files  except  the  command line arguments.
于 2012-09-26T03:36:39.820 に答える
0

この問題に対する別の見方であるため、これを別の回答として追加します。次のように find コマンドを試すことができます。

find * .[^s][^n]* (その他のスイッチ/引数)

検索スイッチの代わりにシェルを使用して、.snapshot ディレクトリを回避します。完璧ではありませんが、あなたがやっていることには十分近いかもしれません。

于 2012-09-28T02:52:49.700 に答える