Renomeie todos os arquivos em uma pasta, de camel case para minúsculas, e coloque underscore em seperate words

1

Eu tenho um monte de arquivos como FileNameX.cpp e gostaria de renomear todos eles para seus respectivos file_name_x.cpp .

    
por MandMs 02.11.2016 / 17:26

1 resposta

5

Este comando bash faz o trabalho. Na linha de comando, insira a pasta e execute esta linha:

for file in ./* ; do mv "$file" "$(echo $file|sed -e 's/\([A-Z]\)/_\L/g' -e 's/^.\/_//')" ; done

No formato de script, é assim:

#!/bin/bash
for file in ./* ; do
    mv "$file" "$(echo $file|sed -e 's/\([A-Z]\)/_\L/g' -e 's/^.\/_//')"
done

Basicamente sed é usado para manipular strings. Existem duas xpressões e :

  1. s/\([A-Z]\)/_\L/g : procura por capitais em s e os substitui por letras minúsculas e adiciona o sublinhado

  2. s/^.\/_// : remove qualquer sublinhado que foi inserido devido à primeira letra ser uma maiúscula (ou seja, você não deseja _file_name_x.cpp .

Considere usar -v , --verbose em mv para explicar o que está sendo feito.

    
por Hadog 02.11.2016 / 17:44