特定のファイル拡張子を持つUNIX検索コマンド

特定のファイル拡張子を持つUNIX検索コマンド

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.oprac_[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"\."

関連情報