
prac_
デスクトップのディレクトリとサブディレクトリで、ファイル名がで始まり、その後に2桁の数字が続き、またはで.c
終わるすべてのファイルを見つけようとします。.o
find ./Desktop -type f -name "prac_[0-9][0-9]*" \( -name "*.c" -o -name "*.o" \)
私が経験している問題は、上記のコマンドがファイルprac_99BLAHBLAH.o
形式をprac_99.c
。
答え1
ファイル名に使用されるワイルドカードパターンはすべての文字列と一致する可能性があるため、パターンの1つと一致する名前はorです*
。prac_99BLAHBLAH.o
prac_[0-9][0-9]*
*.c
*.o
代わりに
find ./Desktop -type f -name 'prac_[0-9][0-9].[co]'
ファイル名ワイルドカードパターンは[co]
単一の文字c
またはに一致するo
ため、とともに使用されるパターンの末尾に配置すると、名前の末尾-name
に2つの文字のいずれかがあるファイル名を見つけることができます。
答え2
数字とファイル拡張子の間の文字を制限しないでください。すべて正規表現にすることができます。
find ./Desktop -type f -regex ".*/prac_[0-9][0-9][.][co]"
- 起動はファイル名だけでなくファイルパスとも一致するため
.*/
です。-regex
- これは
[.]
ピリオドに一致する単一の文字セットです。一般文字はどの文字とも一致できるため使用されます.
。エスケープ処理も機能しますが、\.
プログラミング言語によって構文が異なるため、このスタイルを回避する傾向があります。\\.
r"\."