隣接する小文字と大文字の間にスペースを入れることを目的として、ファイルをcamelCase名と一致させるためにこのコマンドを実行しようとしていますが、何find
も一致しません。
find -E . -regex "([a-z])([A-Z])"
一致させるファイルの例は次のとおりです。
./250 - ErosPhiliaAgape.mp3
このファイルでこの正規表現をテストしました。ここそして試合は成功した。
私のコマンドで私が何を間違っているのfind
?
答え1
似たようなものを探しているかもしれません。
find . -name "*[a-z][A-Z]*"
答え2
Find は-regex
ファイル名だけでなく、フルパスと一致します。つまり、 を見つけるには '.*foo' foo` が/path/to/foo
必要です。あなたは次のようなものが欲しい:-regex
, and not just
find . -E -regex ".*[a-z][A-Z].*"
globを使用する方が簡単で-name
簡単です。提案ただし、正規表現の代わりにSYNを渡してください。
答え3
([a-z])([A-Z])
これは矛盾が原因で発生します./250 - ErosPhiliaAgape.mp3
。実際に([a-z])([A-Z])
正確に一致する文字は2つだけです。-regex
はい固定フルパスを一致させます。以下を使用して-regex
ファイルを検索するには名前には以下が含まれています正規表現では、次のように書くことができます(BSD / macOSfind
構文)。
find -E . -regex '.*/[^/]*([a-z])([A-Z])[^/]*'
GNUは次のような同等物を探します。
find . -regextype posix-extended -regex '.*/[^/]*([a-z])([A-Z])[^/]*'