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」というディレクトリがある場合は、そのディレクトリのエントリを印刷します。
プラットフォーム間の互換性
編集する:私は気づいたばかりです。XそしてHP-UXブランド。
find
使用しているバージョンを指定していません。上記の情報はGNU findについてです。ただし、マニュアルページには次のように記載されています。
Predicate-path は HP-UX find でもサポートされ、将来の POSIX 標準バージョンに登場する予定です。
したがって、HP-UXでは動作しているように見えますが、-path
AIXでは動作しません(少なくともAIX 7.1ではない、2015年8月24日に最後に公開されました)。
答え2
/*/aaaは/aaaと一致しないため、findは/aaa/bbbを見つけることができません。
/で照会を開始するのが好きではなく、-path-enabled照会などの最近のポータブル検索がない場合は、より良い手動開始リストが必要です。