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 :
-
s/\([A-Z]\)/_\L/g
: procura por capitais em s e os substitui por letras minúsculas e adiciona o sublinhado -
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.