Usando find
e rename
:
find . -type f -exec rename 's/string1/string2/g' {} +
Como recursivamente posso substituir uma string em todas as pastas e nomes dos arquivos por uma string diferente? Estou executando o Red Hat 6 e posso encontrá-los com:
find . -name \*string\*
Eu consegui fazer isso por strings dentro de arquivos:
find . -type f -exec sed -i 's/string1/string2/g' {} +
mas como eu poderia substituir de maneira semelhante todos os nomes de arquivos?
você pode substituir todos os nomes de arquivos usando o comando for
e mv
.
aqui estou substituindo todos os arquivos de texto que começam com abc
nomes com xyz
for file in abc*.txt; do mv -v "$file" "${file/abc/xyz}"; done
o comando abaixo substituirá os arquivos recursivamente em todas as pastas
for file in 'find . -type f -name 'abc*.txt''; do mv -v "$file" "${file/abc/xyz}"; done
É mais fácil com zsh
zmv
:
autoload zmv # best in ~/.zshrc
zmv '(**/)(*string1*)' '$1${2//string1/string2}'
Mude para
zmv '(**/)(*string1*)(#qD)' '$1${2//string1/string2}'
Se você também quiser renomear arquivos ou arquivos ocultos em diretórios ocultos.