Existem zilhões de perguntas e respostas sobre como renomear arquivos. Eu sou novo no Linux e essa infinidade de maneiras possíveis e resultados diferentes e configurações diferentes me confundem.
Por exemplo:
rename
funciona, mas não recursivamentegrep
funciona recursivamente, mas não pode ser usado para pesquisar nomes de arquivos e diretórios, em vez do conteúdo do arquivofind
funciona, mas tem uma sintaxe longa e feia quando você deseja pesquisar usando expressões regulares.
E também muitas respostas sobre ask ubuntu e stackoverflow não funcionam para mim e não sei como depurá-las e solucioná-las.
Então, me perdoe por perguntar mais uma vez.
Estou procurando uma maneira limpa e memorizável de:
Renomear arquivos recursivamente usando expressão regular simples .
Eu já faço isso para o conteúdo dos arquivos usando esta sintaxe:
grep -rl search_regex | xargs sed -i 's/old/new/g'
Funciona sem muita frustração. Funciona fora da caixa. Ele apenas funciona. Estou procurando uma solução viável que seja limpa e organizada. Você pode me ajudar por favor?
Não é possível encontrar nada longo e feio sobre
find
:Você pode tornar
rename
recursiva se essa for a sintaxe que você preferir:globstar
A opção do Bash faz**
corresponder 0 ou mais diretórios ou arquivos recursivamente, portanto,**/*
será recursiva em toda a árvore de diretórios. Você só precisa escrever seu padrão de pesquisa como um glob em vez de uma expressão regular. Por exemplo, para renomear todos os arquivos cujo nome contémfoo
, você faria:Você deve ser capaz de manter mais ou menos o mesmo formato que tinha com grep e sed, embora eu ache que você ainda precisará de uma ferramenta como find para fornecer ao grep arquivos para pesquisar.
Edit: atualizado com informações dos comentários. obrigado @pLumo e @terdon por mostrar que falharia em arquivos com caracteres de nova linha no nome.