Como renomeio todos os diretórios que contêm um caractere específico

0

Então eu perguntei isso pergunta sobre como encontrar um diretório que contenha um caractere específico.

Agora eu gostaria de mudar esse caractere para outra coisa (não o nome inteiro apenas esse caractere)

Exemplo:

find "a"
     aaa 
     bab
replace with "c"
     ccc
     bcb

Como faço isso?

Este é o código que tenho atm

read -p "find what character: " findwhat
find . -name "*$findwhat*" -type d -print
    
por Devid Demetz 11.06.2017 / 16:42

1 resposta

0

Uma abordagem seria usar rename (também conhecido como prename ). Para substituir _ por - :

rename 's/_/-/g' dirname

(o g substitui todas as ocorrências. Omitir se você quiser substituir apenas uma ocorrência)

Combinando isso com sua declaração find :

find . -name "*$findwhat*" -type d -execdir rename "s/$findwhat/$replacewith/g" {} \;

Talvez seja necessário modificar isso para que a substituição de variável funcione corretamente.

Nota: O {} indica -execdir/-exec onde inserir o nome do arquivo no comando; o ; informa onde os comandos terminam - e você precisa escapar com \ porque senão o shell o tratará como um separador de comandos.

    
por 11.06.2017 / 17:45