Často importuji fotografie a videa (většinou s příponami JPG a MOV) z digitálních fotoaparátů a tabletů do mého PC a v ideálním případě bych je rád viděl seřazené podle dat a časů pořízení jsou již obsaženy v jejich EXIF datech. A proto si přeji přejmenovat je všechny nejlépe pomocí jednoduchého Nautilus Script nejlépe vložením data a času před každý název souboru.
Doposud se mi podařilo dát dohromady pouze následující skript Nautilus, který, jak věřím, má k dokonalosti daleko:
for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i""
done
Co se mi na této metodě přejmenování nelíbí, jsou dvojtečky používané v datech a časech EXIF (např. „2013:09:03 20:55:09_IMG_0108.JPG“), což může způsobit problémy při pozdějším přenosu těchto souborů do jiných prostředí (např. Windows).
Tento příkaz (pomocí exiv2 místo exiftool ) pohodlně umožňuje manipulaci s datovými a časovými razítky, ale jeho nevýhodou je, že nefunguje u souborů videa (např. MOV) :
exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"
Takže doufám, že někdo přijde s lepším řešením. A bylo by kouzlo, kdyby se mu podařilo převést i původní názvy souborů a přípony na malá písmena!
Přijatá odpověď:
Co se mi na této metodě přejmenování nelíbí, jsou dvojtečky používané v EXIF datech a časových razítkách (např. „2013:09:03 20:55:09_IMG_0108.JPG“), které mohou způsobit problémy při pozdějším přenosu těchto souborů do jiných prostředí ( např. Windows).
Schéma pojmenování můžete spustit pomocí sed
, abyste nahradili dvojtečky pomlčkami a mezery podtržítky, například takto:
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i"
Co se týče psaní celé věci na malá písmena, můžete použít rename
:
rename 's/(.*)/\L$1/' file.JPG
## or
rename 's/(.*)/\L$1/' *.*
Nebo to můžete udělat ve svém skriptu pomocí sed
, jako v:
j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')
…a pak použijte $j
proměnná místo posledního $i
z vašeho mv
čára. Tento způsob sed je o něco přenosnější (pokud na vás záleží), protože různá linuxová distribuce mají různé příkazy pro přejmenování, zatímco sed je univerzální.
Nebo lze skript upravit následovně a provést převod názvu souboru na malá písmena na začátku pomocí tr
místo toho:
for arg
do
tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp"
done
K provádění mírně odlišných příkazů pro různé typy souborů lze v tomto skriptu použít příkaz bash case. Například:
#! /usr/bin/env bash
for filename in ./*
do
tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')"
case "$filename" in
*.MOV|*.mov)
mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp"
;;
*.JPG|*.jpg)
mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp""
;;
*)
echo 'Not a *.jpg or a *.mov!'
;;
esac
done
V tomto příkladu je přejmenování souborů MOV, které mají časová razítka CreateDate JAKÝKOLI POČET hodin PO NEBO PŘED JPG soubory, upraveno použitím jiných (-tur) EXIF dat a odstraněním této přípony časového rozdílu a může být nutné změnit -tur část podle umístění nastaveného v systému.