find . -name '*.py'

o -name teste procura um padrão, como todos os arquivos que terminam em .py. Mas find pode fazer muito mais com outras condições de teste, incluindo -regex testes. Corre find --help para ver a infinidade de opções.

Ajuste ainda mais sua pesquisa usando grep para obter apenas os arquivos que contêm a string que você deseja alterar, por exemplo, adicionando:

grep -le '<a whale>'

o -l opção dá-lhe apenas os nomes de arquivo para todos os arquivos que contêm um padrão (denotado com -e) que correspondem a “uma baleia”.

Você também pode usar o impressionante :bufdo que permite que você execute o mesmo comando em vários buffers. Ele trabalha interativamente com todos esses arquivos sem o tédio de abrir, salvar e fechar cada arquivo, um de cada vez.

Vamos conectar seu poderoso find+grep resulta no Vim com:

vim `find . -name '*.py' -exec grep -le '<a whale>' {} ;`

Usar a expansão de backtick para passar nossa pesquisa ao Vim abre vários buffers prontos para uso. (Faz :h backtick-expansion no Vim para mais.)

Agora você pode aplicar o comando Vim :bufdo a todos esses arquivos e execute ações como pesquisa e substituição interativas:

:bufdo %s/a whale/a bowl of petunias/gce

o g para “global” mudará as ocorrências do padrão em todas as linhas. o e irá omitir erros se o padrão não for encontrado. o c opção torna isso interativo. Se você estiver se sentindo confiante, pode omiti-lo para fazer as alterações sem revisar cada uma.

Quando terminar de passar por todos os buffers, salve todo o trabalho concluído com:

:bufdo wq!

Em seguida, aproveite a glória de seu tempo e esforço economizados.