web-dev-qa-db-ja.com

「タイプd」の検索からこの/現在/ドットフォルダーを除外する方法

find . -type d

いくつかの開始点の下にあるすべてのディレクトリを見つけるために使用できます。ただし、現在のディレクトリ(.)も返されるため、望ましくない場合があります。どうすれば除外できますか?

165
Matthias Ronge

POSIX 7ソリューション

find . ! -path . -type d

この特定のケース(.)の場合、ゴルフはmindepthソリューション(24対26文字)よりも優れていますが、!のために入力するのはおそらく少し難しいでしょう。

他のディレクトリを除外するために、これはあまり良くなく、DRYnessの変数が必要です:

D="long_name"
find "$D" ! -path "$D" -type d

!-mindepth間の決定ツリー:

  • 脚本?移植性のために!を使用します。
  • gNUでの対話セッション?
    • .を除外しますか?コインを投げます。
    • long_nameを除外しますか? -mindepthを使用します。

findの再帰の深さは-maxdepthパラメーターで制御できるだけでなく、対応する-mindepthパラメーターを使用して深さを「上」から制限することもできます。したがって、実際に必要なものは次のとおりです。

find . -mindepth 1 -type d
173
Matthias Ronge

最初のレベルのドットファイルを無視してもかまわないときはfind ./* <...>を使用します(bashでは* globはデフォルトではこれらと一致しません-shoptビルトインの 'dotglob'オプションを参照してください: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html )。

 Eclipse tmp#find。
。
 ./ screen 
 ./ screen/.testfile2 
 ./。X11-unix 
 ./。ICE-unix 
 ./ tmux-0 
 ./ tmux-0/default 
 Eclipse tmp#find ./*
./screen
./screen/.testfile2
./tmux-0
./tmux- 0/default 
18
Milos Ivanovic

まあ、簡単な回避策もあります(Windows git bashでは解決策がうまくいきませんでした)

find * -type d

パフォーマンスはそれほど高くないかもしれませんが、仕事を終わらせます。

[編集]:@AlexanderMillsがコメントしたように、ルートの場所に隠しディレクトリ(例:./.hidden)は表示されませんが、隠しサブディレクトリ(例:./folder/.hiddenSub)は表示されません。 [Windowsでのgit bashによるテスト]

1
StackHola