解決策

解決策

デフォルト名がファイルの親ディレクトリ名と一致するディレクトリ内の*.pdfすべてのファイルを繰り返し検索したいと思います。~/foo

たとえば、ディレクトリ構造が~/foo次のようになるとします。

foo
├── dir1
│   ├── dir1.pdf
│   └── dir1.txt
├── dir2
│   ├── dir2.tex
│   └── spam
│       └── spam.pdf
└── dir3
    ├── dir3.pdf
    └── eggs
        └── eggs.pdf

目的のコマンドを実行すると返されます。

~/foo/dir1/dir1.pdf
~/foo/dir2/spam/spam.pdf
~/foo/dir3/dir3.pdf
~/foo/dir3/eggs/eggs.pdf

これを使用できますかfind?それとも別のコアユーティリティを使用できますか? optionsを使ってこれを行うことは可能だと思います-regexが、find正しいパターンを作成する方法がわかりません。

ベストアンサー1

GNUの使用find:

find . -regextype egrep -regex '.*/([^/]+)/\1\.pdf'
  • -regextype egrepegrepスタイルの正規表現を使用してください。
  • .*/祖父母様マッチング案内です。
  • ([^/]+)/グループの親ディレクトリと一致します。
  • \1\.pdfbackreferenceファイル名を親ディレクトリと一致させるために使用されます。

修正する

誰か(自分自身)は、これが十分に貪欲であり、親一致から除外する必要はないと考える.*ことができます。/

find . -regextype egrep -regex '.*/(.+)/\1\.pdf'

上記のコマンドは数学的なので正しく機能しません./a/b/a/b.pdf

  • .*/マッチ./
  • (.+)/マッチa/b/
  • \1.pdfマッチa/b.pdf

おすすめ記事