ディレクトリ/ファイルの組み合わせ検索は可能ですか?

ディレクトリ/ファイルの組み合わせ検索は可能ですか?

ABC_MPSCというディレクトリにプログラム的に配置されるABC.jpgのようなイメージを見つける必要があります。私は試した:

cd /
find . -name "ABC_MPSC/ABC.jpg"

しかし、これは何も返しません。 (私は実際に私が検索している特定のコンテンツがどこにあるかを知っているので、それが存在することを知っています。)手動で検索する必要がない find コマンドはありますか?

答え1

以下は-path有用な述語です。

find . -path '*/ABC_MPSC/ABC.jpg'

これPOSIX 説明する述語は次のとおりです。

現在のパス名がパターン一致表記で説明されているパターン一致表記を使用するパターンと一致する場合、ホスト変数はtrueと評価する必要があります。ファイル名拡張パターンの追加規則は、拡張ではなく一致操作なので適用されません。

あなたが失敗する理由は述語-name "ABC_MPSC/ABC.jpg"によるものです。-name

現在のパス名のデフォルト名がパターンと一致する場合は true と評価されます。

つまり、-name一度も見たことがない目次現在のファイル名のうち、デフォルトのファイル名自体のみ(例:ABC.jpg)

答え2

2つの方法(除外使用-path):

  1. ディレクトリを見つけてファイルを検索します。

    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
    
  2. ファイルを見つけて親ディレクトリ名を確認してください。

    find / -type f -name 'ABC.jpg' -exec sh -c '
        case $(dirname "$1") in
            */ABC_MPSC) exit 0 ;;
            *) exit 1
        esac' sh {} \; -print
    

-pathどちらの選択肢も、Jeffが示した方法よりも遅くなります。それでも他の用途に適している可能性があるので、ここに例として残しておきます。

関連情報