Итак, вот пример сценария, который будет массово переименовывать файлы изображений в стандарт, который начинается с даты и времени, когда изображение было снято в соответствии со встроенными данными EXIF. Это также делает некоторые другие вещи. Вам нужно будет настроить его под свои нужды. Я включаю имя камеры в название изображения в случае, если у меня есть столкновение даты / времени и потому, что оно помогает мне узнать, кто сделал фотографию. Он также добавит порядковый номер в конец имени, если есть конфликт имен.
Вам понадобятся два инструмента командной строки: jhead
и exiftool
хотя вы можете изменить его, чтобы использовать только один, вероятно. Это скрипт BASH, поэтому он должен работать везде, где можно запустить BASH и двух помощников - я часто запускаю его на ноутбуке с Windows, используя Cygwin.
#!/bin/bash
# Rename camera files to a standard
# jhead (jhead -n%Y-%m-%d %H-%M-%S-Camera Name.jpg)
# exiftool, exiv2, exif
case $1 in
--help|-h|-?)
echo ' '
echo 'Rename a folder full of files to match the date/time taken and the camera model:'
echo ' "IMG_0001.jpg" ==> "2007-05-30 13-24-05-Canon PowerShot A720 IS.jpg"'
echo ' Adds a letter to end of name if the result is not unique'
echo ' '
echo 'Please use as:'
echo ' rename.sh folderName [t]'
echo 'Where:'
echo ' folderName is absolute or relative to current folder'
echo ' t, if present prints the command that would be used'
echo ' '
echo 'Requirements:'
echo ' 1) jhead (detects camera type)'
echo ' 2) exiftool (renames non-jpg files)'
echo ' '
echo 'Use the following workflow:'
echo ' 1) Copy files and folders from the camera(s) to a temp folder'
echo ' 2) Run this against the temp folder and check the renames'
echo ' 3) Manually rename any left-overs'
echo ' 4) Add IPTC comments, locations, etc.'
exit
esac
if [ -z "$1" ]; then
#echo 'You need to specify the folder to work on (end with a trailing /)'
## use pwd instead
FOLDER="`pwd`"
else
FOLDER=$1
fi
if [ -x /usr/bin/jhead ]; then
# Check if starts with leading / if not, then prepend pwd for safety
# NB: Note the substring processing: ${varname:start:numChars}
if [ ${FOLDER:0:1} != '/' ]; then
FOLDER="`pwd`/$FOLDER"
fi
# Add trailing / if required
if [ ${FOLDER:${#FOLDER}-1:1} != '/' ]; then
FOLDER="$FOLDER/"
fi
echo "$FOLDER"
cd "$FOLDER"
# Make sure all files are writable
chmod +w *
# Turn upper case extensions into lower case <== CANCEL THIS, the case helps id the camera
#echo "rename 's/\.JPG$/.jpg/' *.JPG"
#/usr/bin/rename 's/\.JPG$/.jpg/' *.JPG
# The above seems to have stopped working for some reason, try this instead
#echo "/usr/bin/rename '.JPG' '.jpg' *.JPG"
#/usr/bin/rename '.JPG' '.jpg' *.JPG
## REPLACE jhead WITH exiftool
ARTIST1=" '-IPTC:By-line=Julian Knight, http://www.knightnet.org.uk/contact.htm?toname=JulianPhotos' "
ARTIST2=" '-IPTC:By-line=James Knight, http://www.knightnet.org.uk/contact.htm?toname=JamesPhotos' "
COPYRIGHT=" '-IPTC:CopyrightNotice<Copyright © ${CreateDate} Julian Knight, all rights reserved' -d '%Y' "
## IPTC meta (Creator, Rights in XMP)
## Move to folders: ./mm-mmm
echo "jhead -model A70 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A70' -ft *.jpg"
jhead -model A70 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A70' -ft *.jpg
echo "jhead -model A720 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A720 IS' -ft *.jpg"
jhead -model A720 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A720 IS' -ft *.jpg
echo "jhead -model A720 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A720 IS' -ft *.JPG"
jhead -model A720 -exonly -nf'%Y-%m-%d %H-%M-%S-Canon PowerShot A720 IS' -ft *.JPG
echo "jhead -model Hero -exonly -nf'%Y-%m-%d %H-%M-%S-MDA Compact III' -ft *.jpg"
jhead -model Hero -exonly -nf'%Y-%m-%d %H-%M-%S-MDA Compact III' -ft *.jpg
echo "jhead -model T8282 -exonly -nf'%Y-%m-%d %H-%M-%S-HTC Touch HD' -ft *.jpg"
jhead -model T8282 -exonly -nf'%Y-%m-%d %H-%M-%S-HTC Touch HD' -ft *.jpg
echo "jhead -model DCR-PC120E -exonly -nf'%Y-%m-%d %H-%M-%S-Sony DCR-PC120E' -ft *.jpg"
jhead -model DCR-PC120E -exonly -nf'%Y-%m-%d %H-%M-%S-Sony DCR-PC120E' -ft *.jpg
echo "jhead -model D90 -exonly -nf'%Y-%m-%d %H-%M-%S-NIKON D90' -ft *.JPG"
jhead -model D90 -exonly -nf'%Y-%m-%d %H-%M-%S-NIKON D90' -ft *.JPG
# James' Samsung S860 Make: Samsung Techwin, Model: <KENOX S860 / Samsung S860>
echo "jhead -model S860 -exonly -nf'%Y-%m-%d %H-%M-%S-Samsung S860' -ft sdc?????.jpg"
jhead -model S860 -exonly -nf'%Y-%m-%d %H-%M-%S-Samsung S860' -ft sdc?????.jpg
#exiftool '-if $make eq "Samsung Techwin"' '-if $model eq "<KENOX S860 / Samsung S860>"' -overwrite_original_in_place sdc?????.jpg
# Deal with .NEF (Nikon Raw) files (rename to YYYY-MM-DD HH-MM-SS-NIKON D90-DSC_????.NEF)
exiftool '-FileName<${CreateDate}-NIKON D90-%f.%e' -d '%Y-%m-%d %H-%M-%S' DSC_????.NEF
# Use %c to add seq num where required
# Deal with .AVI files (rename to YYYY-MM-DD HH-MM-SS-NIKON D90-DSC_????.AVI)
exiftool '-FileName<${FileModifyDate}-NIKON D90-%f.%e' -d '%Y-%m-%d %H-%M-%S' DSC_????.AVI
# Deal with .AVI files (rename to YYYY-MM-DD HH-MM-SS-Samsung S860-sdc?????.avi)
exiftool '-FileName<${FileModifyDate}-Samsung S860-%f.%e' -d '%Y-%m-%d %H-%M-%S' sdc?????.avi
echo ' '
echo 'FINISHED RENAME'
echo ' '
else
echo 'You need to install jhead first'
fi
Обратите внимание, что вам нужно будет узнать, какое имя Maker использует ваша камера в данных EXIF, и соответствующим образом изменить команды, если вы хотите включить имя камеры.
Запустите это для каждой папки с изображениями, и вы должны получить имена всех таким образом, чтобы они всегда сортировались по имени в том порядке, в котором они были взяты, независимо от того, что ОС или другие инструменты делают для создания и изменения файла. даты. Обратите внимание, что вы никогда не можете доверять им в любом случае, так как существует множество причин, по которым они могут измениться (например, даты создания могут быть сброшены после некоторых команд копирования / перемещения).