
Estou uma bagunça na minha pasta de fotos; Quero classificá-los de acordo com a data nas informações EXIF e renomeá-los de acordo com a data (como 001.jpg, 002.jpg e assim por diante).
Como posso fazer isso no Linux? Eu usei o ImageMagick para algumas tarefas básicas de processamento em massa antes (conversão e redimensionamento, etc.). É possível usá-lo para esta tarefa?
Responder1
Você pode usarexiftool. Por alguma razão, o manual online não contém a seção "RENAMING EXAMPLES", que me deu a dica essencial.
Para arquivos apenas JPG, a seguinte invocação de comando deve funcionar:
exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>
Explicação:
-r
é para recursão'-FileName<CreateDate'
diz ao exiftool para renomear o arquivo de acordo com sua tag EXIFCreateDate
(você pode tentar outros comoModifyDate
)-d '%Y-%m-%d/%H_%M_%S%%-c.%%le'
informa como construir a string do nome do arquivo a partir da fonte de data "CreateDate
" (o "%-c
" acrescentará um contador em caso de colisões de arquivos, o "%le
" significa "extensão de arquivo em minúsculas")- Observação: usei "
-FileName<...
" aqui para renomear os arquivos e movê-los para outra pasta em uma única etapa. O manual indica que você deve usar a-Directory<...
sintaxe " " para operações de pasta. Funcionou para mim dessa maneira.
Você deve passar algum tempo lendo o manual desta ferramenta poderosa. Talvez haja um caminho ainda mais curto :D
Responder2
Experimente este produto gratuito:Classificador Exif AmoK.
Responder3
A maneira mais simples é apenas importar arquivos para o jbrout ... então (opcionalmente) todos os arquivos podem ter nomes alterados para algo orientado ao tempo. Ou você pode descobrir que não precisa alterar os nomes (e jbrout é suficiente).
Responder4
Para fazer funcionar no Debian Lenny, tente isto:
import pyexiv2, sys, os, time, datetime, random
dirname = sys.argv[1]
flist=os.listdir(dirname)
dic = dict()
for fname in flist:
image = pyexiv2.Image(sys.argv[1]+'/'+fname)
#metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
#metadata.read()
image.readMetadata()
tag = image['Exif.Image.DateTime']
timestamp = int(time.mktime(tag.timetuple()))
#print fname, ' ', tag.value, ' ', timestamp
try:
dic[timestamp] = fname
except:
print fname, ' not processed.'
keys = dic.keys()
keys.sort()
i = 0
for k in keys:
os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
i+=1