Portál AbcLinuxu, 10. května 2025 08:20
Preji vsem pekny den a prosim o pomoc.
Mam Mandrivu 2005LE a marne hledam program, ktery by umel seradit fotky podle datumu vytvoreni (vyfoceni) a pak je hromadne prejmenovat. Mam z jedny akce asi 3500 fotek z 8 fotaku a potreboval bych je dat do jednoho adresare serazene podle casu.
Vcera jsem nad tim stravil cely den a na Linuxu jsem na nic neprisel. Na win v Zoner media explorer to samozrejme umim, ale myslim, ze by to melo jit i na Linuxu.
Predem dekuji za pomoc Marek Svarc./output
s novým názvom Foto_datum_cas.jpg
#! /bin/bash # Vysledok sa zapise do podadresara ./output # Ak tento adresar neexistuje, tak sa vytvori if [ ! -d "./output" ]; then mkdir ./output fi #Spracuj vsetky subory JPEG v adresari for I in ./*.jpg; do echo $I; # Vyber z EXIFu datum vytvorenia DATUM=`/usr/local/bin/exiftags $I 2>/dev/null | grep Created | awk '{print $3}' | awk -F: '{print $1$2$3}'`; # echo $DATUM # Vyber z EXIFu cas vytvorenia orig_cas=`/usr/local/bin/exiftags $I 2>/dev/null | grep Created | awk '{print $4}'|awk -F: '{print $1$2$3}'`; # echo $orig_cas; # Novy subor bude v adresari ./output s Nazvom v tvare Foti_Datum_cas.jpg vysledok=`printf "./output/Foto_%s_%s.jpg" $DATUM $orig_cas`; # ls -la $I; # echo $vysledok; cp $I $vysledok; doneVyužíva utilitku exiftags .
-rwxrwxrwx 1 dalibor dalibor 282717 2006-01-27 17:20 ./p1190005.jpg ./output/Foto_20060119_.jpg ./p1190006.jpg 20060119 -rwxrwxrwx 1 dalibor dalibor 417453 2006-01-27 17:20 ./p1190006.jpg ./output/Foto_20060119_.jpg ./p1260007.jpg 20060126zobrazí se jen fotka č. p1190006.jpg
-rwxrwxrwx 1 dalibor dalibor 282717 2006-01-27 17:20 ./p1190005.jpg ./output/Foto_20060119_.jpg ./p1190006.jpg 20060119 -rwxrwxrwx 1 dalibor dalibor 417453 2006-01-27 17:20 ./p1190006.jpg ./output/Foto_20060119_.jpg ./p1260007.jpg 20060126zobrazí se jen fotka č. p1190006.jpg
exiftags p1190005.jpg
nech viem kde je problem...
Equipment Make: OLYMPUS IMAGING CORP. Camera Model: FE-120,X-700 Camera Software: Version 1.0 Maximum Lens Aperture: f/2.8 Image-Specific Properties: Image Orientation: Top, Left-Hand Horizontal Resolution: 72 dpi Vertical Resolution: 72 dpi Image Created: 2006:01:19 18:39:08 Exposure Time: 1/80 sec F-Number: f/3.8 Exposure Program: Creative ISO Speed Rating: 80 Exposure Bias: 0 EV Metering Mode: Pattern Light Source: Unknown Flash: Flash, Compulsory Focal Length: 12.00 mm Color Space Information: sRGB Image Width: 2816 Image Height: 2112 Rendering: Normal Exposure Mode: Auto White Balance: Auto Scene Capture Type: Portrait Gain Control: None Contrast: Normal Saturation: Normal Sharpness: Normal Compression Setting: SQ
mkdir OutputNakopíruji do něj soubory:
cp *.jpg OutputZměním adresář:
cd OutputSpusím program jhead:
jhead -nfFoto_%y%m%d-%H%M%S -ft *.jpg
jhead -nf%y%m%d-%H%M%S -ft *
./output
v tvare názov_dátum_čas_číslo.jpg kde názov je reťazec zadávaný ako parameter skriptu, dátum a čas sú z EXIFu a číslo slúži na rozlíšenie pokiaľ by sa vyskytli naraz odfotené fotky(alebo s rovnakým názvom vo výstupe). Testoval som to na fotkách z Nikonu D100,D200 a Panasonicu FZ10. Pokiaľ iný výrobca vymyslí nejaký iný exif s inými tagmi, tak to nemám ako odkontrolovať a nemusia byť dátumy a časy správne. ./output
rovnaký súbor - pri opätovnom spustení skriptu sa súbory zduplikujú so odlišným číslom. Možné sú aj ďalšie muchy alebo chyby, komu sa chce, nech testuje a upravuje. #! /bin/bash Test_nazov() { declare -i num; num=$2; local filename=`printf "%s_%d.jpg" $1 $num`; vysledok=$filename; if [ -e $vysledok ]; then num+=1; vysledok=`printf "%s" $(Test_nazov $1 $num)`; echo $vysledok; else echo $vysledok; fi } #set -o xtrace if [ ! -d "./output" ]; then mkdir ./output fi #Spracuj vsetky subory JPEG v adresari for I in ./*.[jJ][pP][gG]; do echo File: $I; # Vyber z EXIFu datum vytvorenia DATUM=`/usr/local/bin/exiftool $I 2>/dev/null | grep -m 1 "Shooting Date" | awk '{print $4}' | awk -F: '{print $1$ 2$3}'`; echo Date: $DATUM # Vyber z EXIFu cas vytvorenia orig_cas=`/usr/local/bin/exiftool $I 2>/dev/null | grep -m 1 "Shooting Date" | awk '{print $5}'|awk -F: '{print $1 $2$3}'`; echo Time: $orig_cas; # Novy subor bude v adresari ./output s Nazvom v tvare Foti_Datum_cas.jpg printf -v vysledok "./output/%s_%s_%s" $1 $DATUM $orig_cas; # ls -la $I; Final=`echo $(Test_nazov $vysledok 0)`; echo Output: $Final; echo "" cp $I $Final; doneTesteri a vylepšovači sú vítaní
| |-- 20060110___0.jpg | |-- 20060110___1.jpg | |-- 20060119___0.jpg | |-- 20060119___1.jpg | `-- 20060126___0.jpg
jhead -nfNazev_%y%m%d-%H%M%S *
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.