Tento entender como usar o find
comando com expressões regulares (macOS 14.4.1, Zsh 5.9).
Eu tenho um diretório com arquivos como note-red.png
, note-yellow.png
, (e outras cores), folder-red.png
, folder-yellow.png
, (e outras cores), mas os comandos a seguir não mostram nenhum resultado quando executados nessa pasta. O que estou fazendo de errado?
find -E . -regex '^(note|folder)'
find -E . -regex '^(note|folder).+'
A estrutura do RE não está correta. Veja
man find
no seu Mac para obter detalhes, que diz:Então você precisaria usar
-regex '.*/(note|folder)-.*'
.Você já notou o requisito de uso
-E
que permite a alternância de ERE (e onde a sintaxe de agrupamento muda de\(...\)
para(...)
), então isso é bom:Ou para uma correspondência mais precisa (sem correspondência com nomes de diretórios intermediários que começam com
note-
oufolder-
),Você também pode usar o
-name
teste padrão para combinar os dois padrões:Ou como você está usando
zsh
, use seus globs recursivos em vez defind
:(também evita o
./
prefixo no caminho e fornece uma lista classificada (que você pode evitar com ooN
qualificador) e facilita o script de arquivos ocultos (removendo oD
qualificador), embora provavelmente seja mais lento).