Как переименовать фото в соответствии с датой-временем файла или съёмки
Для фотографий (из EXIF или даты файла)
Фотографии отличаются от "просто файлов" тем, что у них может быть внутри дополнительная информация - EXIF. Для переименования всех фотографий в текущей папке из невразумительных имен IMAGE01234.jpg
во что-то наподобие 2012-08-12-235516.jpg
делаем так:
#!/bin/bash
jhead -n%Y-%m-%d-%H%M%S *.{jpg,jpeg,JPG,JPEG}
jhead -n
ищет данные сначала в EXIF, и если этой информации там нет, то берет за основу дату-время файла.
Файлы любых других типов (по дате файла)
Для любых других файлов (логов и так далее) используем ls -l
(приведенному скрипту надо указать имя файла):
#!/bin/bash
mv "$file" `ls -l "$1" | awk '{ print $6"_"$7 }' | tr ':' '-'`.jpg
Если файлов много, то то же самое в цикле
#!/bin/bash
for file in *.jpg *.jpeg *.JPG *.JPEG; do
mv "$file" `ls -l "$file" | awk '{ print $6"_"$7 }' | tr ':' '-'`.jpg
done
Мой текущий ~/bin/dts полностью
#!/bin/bash
## Rename all known media files to their DTS (date/time stamp)
## ATTN: renames ALL files in current directory, no backups or ability to restore old filename
## -- JPEG --
jhead -n%Y-%m-%d-%H%M%S *.{jpg,jpeg,JPG,JPEG}
## -- PNG --
for file in *.png *.PNG; do
mv "$file" `ls -l --full-time "$file" | awk '{ print $6"_"$7 }' | tr ':' '-'`.png
done
## -- 3GP --
for file in *.3gp; do
mv "$file" `ls -l --full-time "$file" | awk '{ print $6"_"$7 }' | tr ':' '-'`.3gp
done