ABC_MPSCというディレクトリにプログラム的に配置されるABC.jpgのようなイメージを見つける必要があります。私は試した:
cd /
find . -name "ABC_MPSC/ABC.jpg"
しかし、これは何も返しません。 (私は実際に私が検索している特定のコンテンツがどこにあるかを知っているので、それが存在することを知っています。)手動で検索する必要がない find コマンドはありますか?
答え1
以下は-path
有用な述語です。
find . -path '*/ABC_MPSC/ABC.jpg'
現在のパス名がパターン一致表記で説明されているパターン一致表記を使用するパターンと一致する場合、ホスト変数はtrueと評価する必要があります。ファイル名拡張パターンの追加規則は、拡張ではなく一致操作なので適用されません。
あなたが失敗する理由は述語-name "ABC_MPSC/ABC.jpg"
によるものです。-name
現在のパス名のデフォルト名がパターンと一致する場合は true と評価されます。
つまり、-name
一度も見たことがない目次現在のファイル名のうち、デフォルトのファイル名自体のみ(例:ABC.jpg)
答え2
2つの方法(除外使用-path
):
ディレクトリを見つけてファイルを検索します。
find / -type d -name 'ABC_MPSC' -exec test -f {}/ABC.jpg \; -print
これは、見つかったディレクトリの現在のパス名に
find
拡張される実装に依存します。{}
/ABC.jpg
必須これを行うことができるはずです。)次のように書くこともできます。find / -type d -name 'ABC_MPSC' \ -exec sh -c 'test -f "$1"/ABC.jpg' sh {} \; -print
ファイルを見つけて親ディレクトリ名を確認してください。
find / -type f -name 'ABC.jpg' -exec sh -c ' case $(dirname "$1") in */ABC_MPSC) exit 0 ;; *) exit 1 esac' sh {} \; -print
-path
どちらの選択肢も、Jeffが示した方法よりも遅くなります。それでも他の用途に適している可能性があるので、ここに例として残しておきます。