renomeia o diretório de imagens numéricas

2

Estou tentando renomear um diretório cheio de imagens assim:

test.jpg
funny.gif
sad.png
filename.PNG
filenaaskjas.JPG

para:

1.jpg
2.gif
3.png
4.png
5.jpg

Eu tenho que trabalhar, exceto para as maiúsculas - > conversão em minúsculas:

i=1;
shopt -s nullglob;
for f in *.jpg *.gif *.png *.jpeg *.JPG *.JPEG *.GIF; do
    mv -- "$f" "$i.${f##*.}";
    ((i++));
done

Eu também quero que jpeg se torne jpg .

    
por Michael Mrozek 15.02.2011 / 16:32

4 respostas

3

Tente algo como

ext=$( echo "$i.${f##*.}" | tr [A-Z] [a-z] )
mv -- "$f" $i$ext

ou para nomes de arquivos de tamanho fixo.

dest=$(printf '08d%' $9)$( echo "$i.${f##*.}" | tr [A-Z] [a-z] )
mv -- "$f" $dest

c

    
por 15.02.2011 / 16:44
2

Você pode usar ${parameter/pattern/string} para pesquisar / substituir e ${parameter,,pattern} para converter em minúsculas.

i=1;
shopt -s nullglob;
for f in *.jpg *.gif *.png *.jpeg *.JPG *.JPEG *.GIF; do
    EXT="${f##*.}"
    EXT=${EXT,,}
    EXT=${EXT/jpeg/jpg}
    mv -- "$f" "$i.${EXT}";
    ((i++));
done
    
por 15.02.2011 / 16:43
2

Dois passos:

converter extensões:

for file in *.GIF; do mv $file ${file%GIF}gif; done
for file in *.jpeg; do mv $file ${file%jpeg}jpg; done
...

números de arquivos:

for file in *.gif *.jpg ...; do mv $file $i$file; ((i++)); done
    
por 15.02.2011 / 23:06
1

Se você tem (p) renomear, você pode escrever isto:

shopt -s nullglob;

i=1; 
for f in *.{jpg,JPG,jpeg,JPEG,png,PNG,gif,GIF}; do 
    rename 's/.*\.(.*)$/'$((i++))'.\L$1/; s/jpeg$/jpg/' "$f"; 
done
    
por 15.02.2011 / 23:56

Tags