Um shell-script para renomear arquivos em massa
Publicado por Fábio Emilio Costa em 23 23UTC Janeiro 23UTC 2007
Quem tem câmera digital sabe o quanto é chato aqueles nomes padrões dados pelas câmeras aos arquivos. Você normalmente não tem como saber que ‘DSC00001.JPG’ é a foto da sua irmã durante o Revellion ou qualquer coisa assim. Para isso, vários programas em várias plataformas tem como objetivo renomear em massa arquivos, ou seja, renomear os arquivos de modo que sigam um padrão identificável.
No Linux, infelizmente, não existe algo assim… Mas felizmente existe o bash. Usando este script, você pode renomear os arquivos de sua digital com um nome apropriado para você. Espero que você faça bom proveito do script.
#!/bin/bashi=1
startprefix="DSC"
endprefix=`hostname`
force=
verbose=
scriptname=${0##*/}
while getopts 'hs:fvn:' OPT_LETRA
do
case $OPT_LETRA in
'h') echo "Script para renomear arquivos em massa baseado em prefixo"
echo
echo "$scriptname [OPÇÕES] [prefixo_final] (padrao $endprefix)"
echo
echo "Opções:"
echo
echo "-h retorna essa mensagem de erro"
echo "-s [prefixo] prefixo inicial a ser usado (padrao $startprefix)"
echo "-n [numero] numero de sequencia inicial a ser usado (padrao $i)"
echo "-v verboso: mostra todas as informacoes"
echo "-f sobrescreve arquivos e diretórios existentes"
exit 0
;;
's') startprefix=$OPTARG
;;
'n') i=$OPTARG
;;
'v') verbose="1"
;;
'f') force="1"
esac
done
shift `expr $OPTIND - 1`
if [ -n "$1" ]; then
endprefix=$1
fi
files=`ls ${startprefix}*`
total_files=`echo $files | sed -e 's/ /\\n/g' | wc | sed -re 's/[ \\t]+/ /g' | cut -d' ' -f2`
pow=0
howmuch=1
while true; do
if [ $total_files -lt $howmuch ]; then
break;
fi
howmuch=$(($howmuch * 10))
pow=$(($pow + 1))
done
zero_fill=""
for t in `seq $pow`; do zero_fill="${zero_fill}0"; done
regex="s/^.\\+\\(.\\{$pow\\}\\)$/\\1/"
for actual_file in $files; do
echo $actual_file | grep -E -e '\\.(jpg|png|gif|bmp)$' > /dev/null
if [ $? -eq 0 ]; then
while true; do
extension=`echo $actual_file | sed -e 's/.\\+\\(\\.\\(gif\\|bmp\\|jpg\\|png\\)\\)$/\\1/'`
sequence="${zero_fill}${i}"
suffix=`echo $sequence | sed -e $regex`
newfile="${endprefix}_${suffix}$extension"
i=$((i + 1))
if [ -e $newfile -a -z "$force" ]; then
if [ $newfile == $actual_file ]; then
echo "$newfile é o mesmo... Pulando"
break
fi
echo "Pulando - $newfile já existe ..."
else
if [ ! -z "$verbose" ]; then
args='-v'
fi
if [ ! -z "$force" ]; then
args="${args} -f"
fi
mv $args "$actual_file" $newfile
break
fi
done
fi
done






















Um shell-script para renomear arquivos em massa - Versão Ruby « Linux… e mais coisas disse
[...] Software Livre, Programação, Ruby, Linux | A algum tempo atrás, divulguei aqui um script para renomear arquivos em massa, desenvolvido em Bash. Porém, tive diversos problemas com esse script, principalmente com a [...]
trastysourf disse
Eh.. Are you interested in my fresh seminar Wanna very nice joke?)) What did one cloned sheep say to the other? I am ewe.
/bin/laden disse
Ótimo script para renomear arquivos em massa, feito em Perl
http://www.slackbr.org/forum/viewtopic.php?f=46&t=17300