Como substituir uma string em todos os nomes de pastas e arquivos [duplicados]

3

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?

    
por WooWapDaBug 10.01.2018 / 10:31

3 respostas

3

Usando find e rename :

find . -type f -exec rename 's/string1/string2/g' {} +
    
por 10.01.2018 / 19:12
2

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
    
por 10.01.2018 / 13:46
1

É 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.

    
por 10.01.2018 / 11:30

Tags