デフォルト名がファイルの親ディレクトリ名と一致するディレクトリ内の*.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 egrep
egrepスタイルの正規表現を使用してください。.*/
祖父母様マッチング案内です。([^/]+)/
グループの親ディレクトリと一致します。\1\.pdf
backreference
ファイル名を親ディレクトリと一致させるために使用されます。
修正する
誰か(自分自身)は、これが十分に貪欲であり、親一致から除外する必要はないと考える.*
ことができます。/
find . -regextype egrep -regex '.*/(.+)/\1\.pdf'
上記のコマンドは数学的なので正しく機能しません./a/b/a/b.pdf
。
.*/
マッチ./
(.+)/
マッチa/b/
\1.pdf
マッチa/b.pdf