再帰せずに見つける


246

findサブディレクトリに再帰しないようにコマンドを使用することは可能ですか?例えば、

DirsRoot
  |-->SubDir1
  |    |-OtherFile1
  |-->SubDir2
  |    |-OtherFile2
  |-File1
  |-File2

そして、のようなものの結果はfind DirsRoot --donotrecuourse -type f唯一File1, File2でしょうか?

回答:


380

-maxdepth 1現在のコマンド構造に基づいて、オプションで必要なものを取得できると思います。そうでない場合は、のmanページ参照してみてくださいfind

関連エントリ(便宜上):

-maxdepth levels
          Descend at most levels (a non-negative integer) levels of direc-
          tories below the command line arguments.   `-maxdepth  0'  means
          only  apply the tests and actions to the command line arguments.

あなたのオプションは基本的に:

find DirsRoot/* -maxdepth 0 -type f #This does not show hidden files

または:

find DirsRoot/ -maxdepth 1 -type f #This does show hidden files

OPの例では、これは必要だと思います-maxdepth 1か?
ポールR

@Paul R:実際には、その種類は彼が隠しファイルをどのように処理したいかに依存しますが、それでも私は私の答えを修正しました。彼の例で1はおそらく彼が望んでいるものです。
eldarerathis

1
私にとっては、-maxdepth 0表示されていない任意のファイルをが、-maxdepth 1意図したとおりに動作している、隠されたファイルがうまくとして表示されていると。
Bruce Wayne、

1
注意@BruceWayne *ではfind DirsRoot/* -maxdepth 0 -type f。省略した場合、ファイルは表示されません。
mapeters 2016

@mook、ありがとうございます。でも、この問題が発生した元のコンテキストを思い出せません。
Bruce Wayne


17

POSIX準拠のソリューションを探す場合:

cd DirsRoot && find . -type f -print -o -name . -o -prune

-maxdepthはPOSIX準拠のオプションではありません。


この解決策に感謝しますが、これは単純化できませんfind DirsRoot/* -type f -pruneか?
dokaspar

@dokaspar本当に素晴らしい質問です!(-prunebtwの前に "-o"を挿入するのを忘れました)答えはノーです、それはできません。WHYを単純化できない理由を完全に理解するには、set -xコマンドを発行してから発行するだけで、すぐfind DirsRoot/* -type f -o -pruneに自分で確認できます。根本的な原因は、シェルのDirsRoot/*式の拡張の制限です。
sqr163

CentOSで動作せず、出力で完全な再帰を実行しています!!!! 適切なコマンドはfind . -name . -o -prune
Reishin

とにかく、Solarisでは、DirsRootを希望のパスにしておくと、cdは必要ありません。代わりに、次のことができます。DirsRoot/を見つけます。-type f -print -o -name。-o -prune
spioter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.