x
macOS端末を使用して特定のサブディレクトリ内のディレクトリを見つけたいのですが、わかりy
ませんy
。
このコマンドはfind / -type d -name "x"
検索には機能しますが、x
システムに指定されたディレクトリが多いため、そのディレクトリの下にディレクトリを見つける必要があります。x
x
y
私は努力しました -
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'
これは最速の選択肢ですが、システム内のすべてのユーザーがアクセスできる結果のみを返し、完全に最新ではない可能性があります。