Štítky

auta (18) běh (34) beskydy (13) brusle (34) cukroví (11) divadlo (1) DIY (2) filmy (17) golf (1) hory (37) IT (68) jednokolka (1) kola (109) kolce (10) koloběžky (4) koncert (4) koně (1) létání (20) lezení (22) literatura (8) lodě (2) lyže (130) motorky (61) osobni (1) osobní (102) plavání (4) posilování (2) potraviny (27) příroda (8) recenze (3) recepty (62) sauna (1) squash (3) tanec (3) telefony (19) turistika (60) USA (58) vlaky (4) vysocina (3) wakeboarding (1) závod (1) závody (84) ZLM (66)

pátek 15. září 2017

Jak hromadně přejmenovat JPEG soubory, tak aby jejich jméno tvořil čas pořízení vyčtený z EXIFu


Proč? Aneb motivace...

Přijedete z dovolené a sejde se vám několik tisíc fotografií z různých zdrojů. Pokud jste zvyklí, tak jako já, procházet fotografie chronologicky a odmazávat nejvíce nepovedené, vyvstane před vámi úkol seřadit je dle data pořízení. Mnohdy se však stává, že čas vytvoření/modifikace souboru (rozuměj fotografie) obsahuje nějaký nesmysl, který vážně ani vzdáleně nekoreluje se skutečným časem pořízení. Jako nejlepší varianta se mi jeví využít čas z EXIFu, ale takto řadit JPEGy rozhodně neumí každý "editor" a hlavně to neumí ten můj. A proto jsem se rozhodl procházet fotografie seřazené dle názvu s tím, že každou fotografii přejmenuji dle času jejího pořízení a za něj nalepím původní název, to kvůli sekvencím fotografií, kterých typicky vznikne během jedné vteřiny několik a přinesly by tak nechtěné konflikty během přejmenování.

Jak na to? Linux/Cygwin + Bash + Exiv2


for file_name in `ls *.[jJ][pP][gG]`; do exiv2 -r '%Y-%m-%d_%H-%M-%S_:basename:' rename $file_name; done

Jak na to idempotentně? Linux/Cygwin + Bash + Exiv2

for file_name in `ls *.[jJ][pP][gG]`; do [[ $file_name =~ [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]_[0-9][0-9]-[0-9][0-9]-[0-9][0-9]_.* ]] || exiv2 -r '%Y-%m-%d_%H-%M-%S_:basename:' rename $file_name; done


Jak na to idempotentně s přesunem do adresářů? Linux/Cygwin + Bash + Exiv2
for file_name in `ls *.[jJ][pP][gG]`; do [[ $file_name =~ [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]_[0-9][0-9]-[0-9][0-9]-[0-9][0-9]_.* ]] || exiv2 -r '%Y-%m-%d_%H-%M-%S_:basename:' rename $file_name; done
for file_name in `ls *.[jJ][pP][gG]`; do [[ -d "../${file_name:0:10}_" ]] || mkdir "../${file_name:0:10}_"; done
for file_name in `ls *.[jJ][pP][gG]`; do mv $file_name ../${file_name:0:10}_; done

Žádné komentáře:

Okomentovat