findを使用してファイル名の特殊文字を処理する方法

findを使用してファイル名の特殊文字を処理する方法

次のような特定の文字で始まるすべてのファイルを見つけたいです。

find . -maxdepth 1 \( -name "^m*" -a ! -name "g$" \) -print

しかし、誰かが名前に特殊文字を含むファイルを作成した場合はどうなりますか?例えば

touch "
marst"

基準を満たしても検出されません。スペースで始まるファイルを見つけるには、コードをどのように変更する必要がありますか?

また、\( -name "^m*" -a ! -name "g$" \)findのファイルが「marr」ではなく「./marr」なので、機能しません。これは何も見つからないことを意味します。単語の先頭に一致するようにコードをどのように変更できますか?

ベストアンサー1

-name常に名前だけが一致します。つまり、パスと一致しません。みんな名前。その値は正規表現ではなくパターンなので、次のようにしてm開始するファイル名を見つけることができます。

-name 'm*'

gそして次に終わる名前

-name '*g'

正規表現を使用するには、-regexオプションを参照してください。

おすすめ記事