macOS端末を使用してサブディレクトリ内のディレクトリを検索する

macOS端末を使用してサブディレクトリ内のディレクトリを検索する

xmacOS端末を使用して特定のサブディレクトリ内のディレクトリを見つけたいのですが、わかりyませんy

このコマンドはfind / -type d -name "x"検索には機能しますが、xシステムに指定されたディレクトリが多いため、そのディレクトリの下にディレクトリを見つける必要があります。xxy

私は努力しました -

  • find / -type d -name "/y/x"または
  • find / -type d -name "y/x"または
  • find / -type d -name "../y/x"

しかし、これらは私に望む結果を与えません。

答え1

デフォルトの使用-path:

find / -path '*y/x'
-path pattern
         True if the pathname being examined matches pattern.  Special shell pattern matching characters (``['', ``]'', ``*'', and ``?'') may be used as part of
         pattern.  These characters may be matched explicitly by escaping them with a backslash (``\'').  Slashes (``/'') are treated as normal characters and do
         not have to be matched explicitly.

答え2

zshシェルから:

print -rC1 -- /**/y/x(/D)

globは**サブディレクトリと一致し、(/D)glob修飾子は生成されたパス名がディレクトリでなければならず、パターンも隠された名前と一致することを指定します(dotglobのようにbash)。

またはバージョン4以降と同様の機能bash(たとえば、デフォルトのインストールではなくmacOSのHomebrewからインストールbash):

shopt -s globstar failglob dotglob
printf '%s\n' /**/y/x/

シェルglobstarオプションを使用すると、ワイルドカードパターンをbash使用できます。一致するものがない場合は**failglobエラーでパターン一致が失敗します。この動作は、の可用性と同様failglobのデフォルト値です。zsh**

findしかし、より速いかもしれません。

find / -type d -path '*/y/x'

これがx入ります。y/

または、locate利用可能な関数ユーティリティがあるかもしれません。

locate '*/y/x'

これは最速の選択肢ですが、システム内のすべてのユーザーがアクセスできる結果のみを返し、完全に最新ではない可能性があります。

関連情報