Skip to content

Instantly share code, notes, and snippets.

@Leolik
Last active December 18, 2015 05:29
Show Gist options
  • Save Leolik/5732749 to your computer and use it in GitHub Desktop.
Save Leolik/5732749 to your computer and use it in GitHub Desktop.
The script for renaming files (photos and videos) with the date of creating in the file name. (RU)

Зачем нужен

Создал этот скрипт по просьбе моей жены, для автоматического переименования большого количества файлов (фотографий и видео). При переименовании, к имени файла добавляется дата его создания из EXIF(для фотографий) или дата последней модификации.

Пример:
P1180010.JPG -> P1180010_03-05-2013.JPG

Как запускать

./rename_with_date.sh <путь к папке с файлами>

Связка с Double Commander

  1. Настройка -> Файловые ассоциации
  2. Пример настройки:

Файловые ассоциации

  1. Вызов через контекстное меню:

Вызов через контекстное меню


  • Cкрипт тестировался только в Ubuntu
  • Для вытягивания даты из EXIF должен быть установлен imagemagick
#!/bin/bash
if [ -z "$1" ]; then
echo "./rename_with_date.sh <path to files dir>"
else
VIDEO_EXT='.mp4|.mpg|.mov|.3gp|.avi'
IMAGE_EXT='.jpg|.jpeg'
cd "$1"
# Получение списка файлов (картинок или видео)
IFS=$'\n' array=( $(ls -lQ --time-style=+%d-%m-%Y | grep -iE "$IMAGE_EXT|$VIDEO_EXT") )
# Проверка на количество найденных файлов
if ((${#array[@]} <= 0)); then
notify-send 'Не найдены файлы для переименования'
else
for fileRow in ${array[@]}; do
file=$(echo $fileRow | sed 's/\(.*\s"\|"\)//g')
fileName=$(echo $file | sed 's/\.[^\.]*$//g')
fileExt=$(echo $fileRow | sed 's/\(.*\.\|"\)//g')
fileDate=''
# Проверка, является ли текущий файл картинкой
if [ -n "$(echo .$fileExt | grep -iE $IMAGE_EXT)" ]; then
# Считывание даты создания из EXIF
fileDate=$(identify -format %[exif:DateTimeOriginal] $file)
if [ -n "$fileDate" ]; then
year=$(echo $fileDate | sed 's/:.*//')
month=$(echo $fileDate | sed 's/\(^....:\|:.*\)//g')
day=$(echo $fileDate | sed 's/\(^....:..:\|\s.*\)//g')
fileDate='_'$day'-'$month'-'$year
echo -e '\E[33minfo: '$file': Используется дата создания из EXIF'; tput sgr0
fi
fi
# Если дата все еще пустая или файл без EXIF, то берется дата последней модификации
if [ -z $fileDate ]; then
fileDate=$(echo $fileRow | grep -oE '\s[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' | sed 's/\s/_/')
echo -e '\E[33minfo: '$file': Используется дата последней модификации'; tput sgr0
fi
# Проверка, был ли файл переименован ранее или нет
if [[ "$fileName" != *$fileDate* ]]; then
mv $file $fileName$fileDate'.'$fileExt
echo -e '\E[32msuccess: '$file': Файл успешно переименован'; tput sgr0
else
echo -e '\E[31mcancel: '$file': Файл уже был ранее переименован'; tput sgr0
fi
done
notify-send 'Файлы переименованы'
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment