Localizar e substituir todos os nomes

1

Plano de fundo

Eu sou novo em linux / unix (estou em um mac. Não sei o que estou usando), mas alguém fez muitas pastas e arquivos com o nome errado, e eu preciso entrar e substituir tudo com o nome correto. Por exemplo. ela nomeou maçã em vez de laranja.

O que preciso fazer

Naveguei para o diretório de interesse e, dentro desse diretório, preciso:

  1. Substitua a palavra maçã por laranja no nome de qualquer subpasta, arquivo ou diretório

  2. Substitua a palavra maçã por laranja em todos os arquivos (texto e sem texto)

O que tentei

Eu tentei este comando:

grep -lr "apple" . | xargs sed -i "s/apple/orange/g"

e isso não funcionou de todo

Eu também tentei:

find ./ -exec sed -i 's/apple/orange/g' {} \;

Isso substituiu muitas das instâncias, mas não todas. E isso não substitui a palavra dentro de nomes de arquivos / pastas / diretórios

Por favor me ajude!

    
por JLynn 20.09.2016 / 17:51

1 resposta

0

Isso pode ser mais BASH, então é possível, mas talvez ajude na direção certa.

Resumindo, encontre todas as pastas com a apple, inverta o tipo para que

/tmp/apple/test/apple

não causa problemas quando a primeira "maçã" é alterada fora de ordem. Em seguida, alimente a saída em um loop while com a função read carregando uma variável que armazene todas as pastas correspondentes. Finalmente, mv as pastas na estrutura do nome certo.

para diretórios, tente

find ./ -regex '^.*apple' -type d | sort -r | while read badname ; do mv $badname ${badname/%apple/orange}; done

para nomes de arquivos (depois que os diretórios são limpos)

find ./ -regex '^.apple.' -type f | sort -r | while read badname ; do mv $badname ${badname/apple/orange}; done

para conteúdo de arquivo, há muitos outros exemplos disso,

Awk / Sed: How fazer uma busca / substituição recursiva de uma string?

    
por 21.09.2016 / 04:21