Você sempre pode usar o utilitário gratuito Bulk Rename .
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.
Você sempre pode usar o utilitário gratuito Bulk Rename .
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.
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
#!/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
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