Substituir uma subcadeia de nomes de arquivos em um diretório

4

Existe um diretório, que inclui vários níveis de subdiretórios. Sob esses diretórios, há um conjunto de arquivos cujos nomes incluem uma palavra comum, por exemplo, .cc . Como posso substituir o .cc nos nomes desses arquivos por .cpp ?

    
por user785099 08.10.2011 / 23:47

2 respostas

3

Quando você diz que os arquivos "nomes incluem uma palavra comum", suponho que você esteja se referindo ao fato de que eles compartilham a extensão .cc : em caso afirmativo, usando Gilles 'answer here você poderia construir um comando que alcançasse seu objetivo:

 find -type f -exec sh -c '
    for file; do [ "${file##*.}" = "cc" ] && 
    mv -- "$file" "${file%.cc}.ccp"; done
    ' -- {} +

Veja esta resposta em SO para mais detalhes

    
por 09.10.2011 / 01:11
3

No zsh:

autoload zmv
zmv '(**/)(*).cc' '$1$2.cpp'

Em bash ≥4:

for x in **/*.cc; do mv "$x" "${x%.cc}.cpp"; done

Em qualquer shell:

find -name '*.cc' -exec sh -c 'for x; do mv "$x" "${x%.cc}.cpp"; done' _ {} +

Mais simples e portátil para sistemas mais antigos, mas um pouco mais lento:

find -name '*.cc' -exec sh -c 'mv "$0" "${0%.cc}.cpp"' {} \;

Veja esta resposta para explicações.

    
por 10.10.2011 / 01:10

Tags