Děkujeme @John1024!
Potřeboval jsem přejmenovat soubory s různými příponami ve stejnou dobu, podle data poslední úpravy:
for f in *; do
fn=$(basename "$f")
mv "$fn" "$(date -r "$f" +"%Y-%m-%d_%H-%M-%S")_$fn"
done
"DSC_0189.JPG" ➜ "2016-02-21_18-22-15_DSC_0189.JPG"
"MOV_0131.avi" ➜ "2016-01-01_20-30-31_MOV_0131.avi"
Pokud nechcete zachovat původní název souboru:
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
Doufám, že to pomůže noobům jako mně!
Pojmenování podle data systému souborů
V linuxovém prostředí:
for f in *.jpg
do
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
done
Vysvětlení :
-
for f in *.jpg do
Tím se spustí smyčka nad všemi soubory jpeg. Jeho rysem je, že bude fungovat se všemi názvy souborů, včetně těch s mezerami, tabulátory nebo jinými složitými znaky v názvech.
-
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
Tím dojde k přejmenování souboru. Používá
-r
možnost, která říkádate
pro zobrazení data souboru namísto aktuálního data. Specifikace+"%Y%m%d_%H%M%S"
říkádate
jej naformátujte tak, jak jste zadali.Název souboru
$f
, je umístěn v dvojitých uvozovkách, kdekoli je použit. To zajišťuje, že liché názvy souborů nezpůsobí chyby.-n
možnostmv
říká move nikdy nepřepsat existující soubor. -
done
Tím je smyčka dokončena.
Pro interaktivní použití můžete dát přednost tomu, aby byl celý příkaz na jednom řádku. V takovém případě použijte:
for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
Pojmenování podle data vytvoření EXIF
K pojmenování souboru podle data vytvoření EXIF (místo data systému souborů) potřebujeme exiftool
nebo ekvivalentní:
for f in *.jpg
do
mv -n "$f" "$(exiftool -d "%Y%m%d_%H%M%S" -CreateDate "$f" | awk '{print $4".jpg"}')"
done
Vysvětlení :
Výše uvedené je velmi podobné příkazům pro datum souboru, ale s použitím exiftool
a awk
pro extrahování data vytvoření obrázku EXIF.
-
exiftool
příkaz poskytuje datum ve formátu jako:$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg Create Date : 20121027_181338
Skutečné datum, které chceme, je čtvrté pole ve výstupu.
-
Předáme
exiftool
výstup naawk
aby mohl extrahovat pole, které chceme:awk '{print $4".jpg"}'
Tím se vybere pole data a přidá se také
.jpg
rozšíření.
Zkuste toto
for file in `ls -1 *.jpg`; do name=`stat -c %y $file | awk -F"." '{ print $1 }' | sed -e "s/\-//g" -e "s/\://g" -e "s/[ ]/_/g"`.jpg; mv $file $name; done
I když může existovat jednodušší způsob.