Portál AbcLinuxu, 15. prosince 2025 20:12
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;
done
Využí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
Normálně ale pouze spustím program jhead:
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;
done
Testeri a vylepšovači sú vítaní
Zobrazuje to všechny fotky, ale pořadí není zobrazováno správně
| |-- 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.