Solarisでdepth / pruneと同等ですか?


10

ディレクトリ内のいくつかのファイルを見つけようとしています。デフォルトでは、検索commandは指定したディレクトリとそのサブディレクトリを検索します。

私はdepth/maxdepthand を使おうとしpruneましたが、これを克服するのに役立つものは何もありませんでした。Solarisでdepth / pruneを使用する正しい方法を誰かが指摘できますか?

私のコードは次のようになります:

find file_path -depth 1 -name '*.log'

次のエラーが発生します。

find: bad option 1
find: [-H | -L] path-list predicate-list

回答:


15

漠然と類似した名前を持つ2つの無関係なオプションを混乱させています。

  • -depth引数は取りません。存在する場合findは、ディレクトリ自体を処理する前にディレクトリの内容を処理するように指示します。
  • -maxdepth N (Nは整数)は、再帰をNレベルのサブディレクトリに制限します。

この-maxdepthオプションはの一部のバージョンにある拡張機能ですがfind、Solarisにはありません。標準オプションのみを使用しfindて、再帰せずにディレクトリを処理するコツがあります-prune。サブディレクトリで使用しますが、トップレベルディレクトリを除外します。トップレベルのディレクトリに一致させる唯一の方法は名前によるため、名前が.(サブディレクトリの名前になることは決してない)になるように調整します。

find /directory/to/traverse/. -name . -o \
                              -type d -prune -o \
                              -name '*.log' -print

私はこの非常に問題に直面しており、この解決策が役立ちました。私はこれを機能させるための解決策を見つけるために1日を費やしました。Grrr、Solaris。
Kevin Teljeur

sedを使用して/./ find $ {directory} / sh /を削除すると問題が発生しますか。-名前 。-o -type d -prune -o -print | sed 's /\/\.\//\//'
Ethan Post

あなたはそれを行うことができ@EthanPostが、なしの実装を見つける-mindepth-maxdepth消失品種です。発見があった場合は-maxdepth、次を使用しますfind /directory/to/traverse -mindepth 1 -maxdepth 1 -name '*.log'
Gilles 'SO- Stop

@Gillesは、そのような状況で実行する必要があるかもしれないフレームワークを構築しているときに、あなたを壊すのにちょうどかかります!その市場はいつか私のパンとバターかもしれません!助けてくれてありがとう。
イーサンポスト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.