web-dev-qa-db-ja.com

サブディレクトリでパスディレクトリを見つける

親ディレクトリがbbbであるディレクトリ名aaaのパスを見つけたい

例えば

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

だから私はこのようなものを書きました:

find /*/aaa -name bbb

一部のプラットフォームでは機能し、一部のプラットフォームでは機能しません。また、aaaへの親ディレクトリがないため、/aaa/bbbが見つかりません。

find / -name bbb | grep \/aaaは実行できると思いますが、もっと賢いものがあると思います。

3
Nir

この場合は-pathオプションを使用します。

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

Findのmanページから:

ファイル名はシェルパターンパターンと一致します。メタ文字は/または.を特別に扱いません。たとえば、

find . -path "./sr*sc"

`./src/misc 'というディレクトリ(存在する場合)のエントリを出力します。

クロスプラットフォームの互換性

編集:aix および hp-ux タグに気づきました。

使用しているfindのバージョンを指定するのではなく、上記の情報はGNU findに適用されます。ただし、manページには、

述語-pathはHP-UX findでもサポートされており、POSIX標準の次期バージョンに含まれる予定です。

したがって、-pathはHP-UXでは使用できますが、AIXでは使用できません(少なくとも AIX 7.1以外 、2015-08-24の最新リリース)。

5

/ */aaaは/ aaaと一致せず、これがfindが/ aaa/bbbを見つけられない理由です

/で検索を開始したくない場合、および-pathをサポートするポータブルsfindのような最近の検索がない場合は、より良い手動の開始リストが必要です。

0
schily