Você provavelmente está procurando por algo como:
find . -name "*[a-z][A-Z]*"
Eu estou tentando executar este comando find
para corresponder arquivos com um nome de camelo, com o objetivo de colocar um espaço entre letras maiúsculas e minúsculas adjacentes, mas não está combinando nada:
find -E . -regex "([a-z])([A-Z])"
Um exemplo de um arquivo que estou tentando corresponder é
./250 - ErosPhiliaAgape.mp3
Eu testei esse regex neste arquivo aqui e ele corresponde com êxito.
O que estou fazendo de errado com o comando find
?
O -regex
de Find corresponde ao caminho inteiro, não apenas ao nome do arquivo. Isso significa que, para encontrar /path/to/foo
, você precisa de -regex
'. * Foo' , and not just
foo '. Você quer algo como:
find . -E -regex ".*[a-z][A-Z].*"
Seria muito mais simples usar globs e o mais simples -name
como sugerido pela SYN, no entanto, em vez de regexes.
Isso acontece porque ([a-z])([A-Z])
não corresponde a ./250 - ErosPhiliaAgape.mp3
. Na verdade, ([a-z])([A-Z])
pode corresponder exatamente a dois caracteres - -regex
é uma correspondência ancorada ao longo de todo o caminho. Se você quiser usar -regex
para procurar um arquivo cujo nome contenha um regex, você pode escrevê-lo assim (BSD / macOS find
syntax):
find -E . -regex '.*/[^/]*([a-z])([A-Z])[^/]*'
O equivalente de URL do GNU seria algo como
find . -regextype posix-extended -regex '.*/[^/]*([a-z])([A-Z])[^/]*'
Tags find regular-expression