My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# ----------------------------------------------------------------------------
# Renomeia arquivos do diretório atual, arrumando a seqüência numérica.
# Obs.: Útil para passar em arquivos de fotos baixadas de uma câmera.
# Opções: -n apenas mostra o que será feito, não executa
# -i define a contagem inicial
# -d número de dígitos para o número
# -p prefixo padrão para os arquivos
# Uso: zznomefoto [-n] [-i N] [-d N] [-p TXT] arquivo(s)
# Ex.: zznomefoto -n * # tire o -n para renomear!
# zznomefoto -n -p churrasco- *.JPG # tire o -n para renomear!
# zznomefoto -n -d 4 -i 500 *.JPG # tire o -n para renomear!
#
# Autor: Aurelio Marinho Jargas, www.aurelio.net
# Desde: 2004-11-10
# Licença: GPL
# ----------------------------------------------------------------------------
zznomefoto ()
{
zzzz -h nomefoto "$1" && return

local arquivo prefixo contagem extensao nome novo nao previa
local i=1
local digitos=3

# Opções de linha de comando
while [ "${1#-}" != "$1" ]
do
case "$1" in
-p)
prefixo="$2"
shift; shift
;;
-i)
i=$2
shift; shift
;;
-d)
digitos=$2
shift; shift
;;
-n)
nao='[-n] '
shift
;;
*)
break
;;
esac
done

# Verificação dos parâmetros
[ "$1" ] || { zztool uso nomefoto; return 1; }

if ! zztool testa_numero "$digitos"
then
echo "Número inválido para a opção -d: $digitos"
return 1
fi
if ! zztool testa_numero "$i"
then
echo "Número inválido para a opção -i: $i"
return 1
fi

# Para cada arquivo que o usuário informou...
for arquivo
do
# O arquivo existe?
zztool arquivo_legivel "$arquivo" || continue

# Componentes do nome novo
contagem=$(printf "%0${digitos}d" $i)

# Se tiver extensão, guarda para restaurar depois
if zztool grep_var . "$arquivo"
then
extensao=".${arquivo##*.}"
else
extensao=
fi

# O nome começa com o prefixo, se informado pelo usuário
if [ "$prefixo" ]
then
nome=$prefixo
else
# Se não tiver prefixo, usa o nome base do arquivo original,
# sem extensão nem números no final (se houver).
# Exemplo: DSC123.JPG -> DSC
nome=$(echo "${arquivo%.*}" | sed 's/[0-9][0-9]*$//')
fi

# Compõe o nome novo e mostra na tela a mudança
novo="$nome$contagem$extensao"
previa="$nao$arquivo -> $novo"

if [ "$novo" = "$arquivo" ]
then
# Ops, o arquivo novo tem o mesmo nome do antigo
echo "$previa" | sed "s/^\[-n\]/[-ERRO-]/"
else
echo "$previa"
fi

# Atualiza a contagem (Ah, sério?)
i=$((i+1))

# Se não tiver -n, vamos renomear o arquivo
if ! [ "$nao" ]
then
# Não sobrescreve arquivos já existentes
zztool arquivo_vago "$novo" || return

# E finalmente, renomeia
mv -- "$arquivo" "$novo"
fi
done
}

Change log

r710 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: $1 colocado entre aspas na
chamada padrão zzzz -h de todas as
funções.
Go to: 
Sign in to write a code review

Older revisions

r668 by aureliojargas on Mar 28, 2012   Diff
lint: removendo espaços inúteis.
r655 by aureliojargas on Mar 23, 2012   Diff
s/Aurélio/Aurelio/ *
r524 by aureliojargas on May 23, 2011   Diff
COMBO: Agora todas as chamadas ao
zztool uso por falha na verificação
dos parâmetros possuem um return 1
depois. Assim outros scripts que usam
as funções podem detectar erros.
All revisions of this file

File info

Size: 2838 bytes, 118 lines
Powered by Google Project Hosting