サブディレクトリでパスディレクトリを探す

サブディレクトリでパスディレクトリを探す

bbb次の親ディレクトリのディレクトリ名へのパスを見つけたいと思います。aaa

例えば

/aaa/bbb
/tmp/aaa/bbb
/usr/bin/aaa/bbb
/home/aaa/bbb
/home/aaa/xxx/bbb

だから私は次のように書きました。

find /*/aaa -name bbb

一部のプラットフォームでは動作しますが、一部では動作しません。いずれの場合も/aaa/bbb親ディレクトリがないため、見つかりません。aaa

走ることもあるようだが、もっとfind / -name bbb | grep \/aaaスマートなことはないだろうか…?

答え1

-pathこの場合は、このオプションを使用してください。

find / -type d  -path '*/aaa/bbb'

見つかったマニュアルページから:

ファイル名はシェルパターンと一致します。メタ文字は処理/または.特別ではありません。たとえば、次のようになります。

find . -path "./sr*sc"

「./src/misc」というディレクトリがある場合は、そのディレクトリのエントリを印刷します。

プラットフォーム間の互換性

編集する:私は気づいたばかりです。そしてブランド。

find使用しているバージョンを指定していません。上記の情報はGNU findについてです。ただし、マニュアルページには次のように記載されています。

Predicate-path は HP-UX find でもサポートされ、将来の POSIX 標準バージョンに登場する予定です。

したがって、HP-UXでは動作しているように見えますが、-pathAIXでは動作しません(少なくともAIX 7.1ではない、2015年8月24日に最後に公開されました)。

答え2

/*/aaaは/aaaと一致しないため、findは/aaa/bbbを見つけることができません。

/で照会を開始するのが好きではなく、-path-enabled照会などの最近のポータブル検索がない場合は、より良い手動開始リストが必要です。

関連情報