renomeia os nomes dos arquivos de minúsculas para maiúsculas

3

Eu tenho cerca de 2k de arquivos que estão atualmente em minúsculas como:

file_one.cfr
file_two.cfr
....

Estou procurando uma maneira rápida de renomeá-los para maiúsculas para que eles fiquem assim:

FILE_ONE.cfr
FILE_TWO.cfr
....

Se eu usar do meu shell;

for i in *; do mv $i 'echo $i | tr [:lower:] [:upper:]'; done

Eu posso colocar todos os arquivos e as extensões de arquivo em maiúsculas.

Mas a extensão deve permanecer em minúsculas, então minha abordagem não funciona.

Qualquer linguagem de programação é bem-vinda.

    
por Adnan 11.04.2010 / 15:50

5 respostas

2

Você sempre pode usar o utilitário gratuito Bulk Rename .

    
por 11.04.2010 / 15:53
4

Em qualquer shell:

for i in *.cfr 
do 
    mv "$i" "$(echo ${i%.cfr} | tr [:lower:] [:upper:]).cfr"; 
done

Ele é baseado na sua solução proposta, mas usa a expansão de parâmetro ${parameter%word} para remover a extensão do nome do arquivo.

    
por 12.04.2010 / 07:06
3

Você já pode ter um script Perl no seu sistema chamado rename ou prename .

rename 's/([^.]*)/\U$1/' *.cfr

Ou aqui está uma versão do script do Vlad que elimina a necessidade de grep e sed (funcionará nas versões Bash anteriores à versão 4, pois usa tr em vez do operador ^^ ):

#!/bin/bash

for f in *.cfr
do
    if [[ "$f" == "${f//.}" ]]; then continue; fi
    name="${f%.*}"
    ext="${f##*.}"
    newfullname="$(<<< "$name" tr [:lower:] [:upper:])$ext"
    [[ "$f" == "$newfullname" ]] || mv "$f" "$newfullname"
done
    
por 12.04.2010 / 06:11
2
#!/bin/bash

for f in *
do
    <<< $f grep -q "\." || continue
    name=$(<<<$f sed 's/\.[^\.]*$//')
    ext=$(<<< $f sed 's/^.*\(\.[^\.]*\)$//')
    newfullname=$(<<< $name tr [:lower:] [:upper:])$ext
    [ "$f" == "$newfullname" ] || mv "$f" "$newfullname"
done
    
por 11.04.2010 / 16:24
2

se você tiver bash 4.0

#!/bin/bash

for file in file_*cfr
do
  front=${file%.cfr}
  newfile=${front^^}.cfr
  echo mv "$file" "$newfile"
done

ou você pode usar apenas o awk

awk '
{
  f=FILENAME
  gsub(/\.cfr$/,"",f)
  newfile=toupper(f)".cfr"
  cmd="mv 7"FILENAME"7 7"newfile"7"
  # system(cmd) #uncomment to use
}
' file_*cfr
    
por 11.04.2010 / 16:27

Tags