Софт
Программы для получения информации о дате создания файла: mediainfo exiftool (libimage-exiftool-perl) ffprobe
Скрипт
Скрипт выполняет поиск файлов по расширениям, извлекает из EXIF информацию о дате создания и переименовывает файлы. Работа скрипта аналогична скриптам на power-shell: powershell_script_to_rename_photos_based_on_date_taken, однако работает и с видеофайлами.
#!/bin/bash DIRECTORY="/files/cloud/Unsorted_renamed" for file in $DIRECTORY/*.{jpg,mp4,JPG,3gp,MOV,mov} do filename=$(basename "$file") extension="${filename##*.}" new_file_name=`exiftool -d "%Y_%m_%d-%Hh_%Mm_%Ss" -CreateDate "$file" | awk '{print $4}'` echo "Old FileName " `basename $filename` if [[ "$new_file_name" ]]; then echo "New FileName " $new_file_name.$extension new_file_name=$DIRECTORY/$new_file_name.$extension if [ -f $new_file_name ]; then echo "File $new_file_name already exists. Skipping..." else echo "Moving $file to $new_file_name..." mv $file $new_file_name fi else echo "EMPTY EXIF" fi done
Не мой скрипт
#!/bin/bash # By Ferux, 26 June 2016. # Script for renaming photos and videos based on their date. # Useful for watching slideshows with the videos at the moment they were shot instead of all at the end. # Also useful for combining pictures of multiple sources into the correct order. # For jpg's, the exif date 'taken on' will be used. If that's not found, the date of last change is used. # For all other files, date of last change is used. Only following extensions are affected: mp4, mpg, png, avi, mov, jpg. # To use this: # 1. Put this text in a file named renamephotos # 2. Make the file executable. # 3. Put the file in the folder of which you want to rename the files. # 4. Nautilus: File --> open in terminal. # 5. In the terminal window, enter the following command: ./renamephotos # Make the next one 'true' if you always want to add the original filename at the end of the new one. # Otherwise the script will only do that if 2 files with the same name would be created. preservefn="false" for filename in *.* do echo "$filename" tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')" case "$filename" in 20*) echo 'left alone because already starts with 20' ;; *.mp4|*.MP4) doelextensie=".mp4" wadissergebeurd="Video, used date of last change." newfilename="$(stat -c %y "$filename" | sed -e 's/\................//g' -e 's/-//g' -e 's/://g' -e 's/ /_/g')" if [ -a ""$newfilename""$doelextensie"" ] || [ "$preservefn" == "true" ] then mv -i "$filename" """$newfilename"_"$filename""" echo "$wadissergebeurd" echo 'Original name added at the end' else mv -i "$filename" ""$newfilename""$doelextensie"" echo "$wadissergebeurd" fi ;; *.mpg|*.MPG) doelextensie=".mpg" wadissergebeurd="Video, used date of last change." newfilename="$(stat -c %y "$filename" | sed -e 's/\................//g' -e 's/-//g' -e 's/://g' -e 's/ /_/g')" if [ -a ""$newfilename""$doelextensie"" ] || [ "$preservefn" == "true" ] then mv -i "$filename" """$newfilename""_""$filename""" echo "$wadissergebeurd" echo 'Original name added at the end' else mv -i "$filename" ""$newfilename""$doelextensie"" echo "$wadissergebeurd" fi ;; *.png|*.PNG) doelextensie=".png" wadissergebeurd="PNG, used date of last change." newfilename="$(stat -c %y "$filename" | sed -e 's/\................//g' -e 's/-//g' -e 's/://g' -e 's/ /_/g')" if [ -a ""$newfilename""$doelextensie"" ] || [ "$preservefn" == "true" ] then mv -i "$filename" """$newfilename""_""$filename""" echo "$wadissergebeurd" echo 'Original name added at the end' else mv -i "$filename" ""$newfilename""$doelextensie"" echo "$wadissergebeurd" fi ;; *.avi|*.AVI) doelextensie=".avi" wadissergebeurd="Video, used date of last change." newfilename="$(stat -c %y "$filename" | sed -e 's/\................//g' -e 's/-//g' -e 's/://g' -e 's/ /_/g')" if [ -a ""$newfilename""$doelextensie"" ] || [ "$preservefn" == "true" ] then mv -i "$filename" """$newfilename""_""$filename""" echo "$wadissergebeurd" echo 'Original name added at the end' else mv -i "$filename" ""$newfilename""$doelextensie"" echo "$wadissergebeurd" fi ;; *.mov|*.MOV) doelextensie=".mov" wadissergebeurd="Video, used date of last change." newfilename="$(stat -c %y "$filename" | sed -e 's/\................//g' -e 's/-//g' -e 's/://g' -e 's/ /_/g')" if [ -a ""$newfilename""$doelextensie"" ] || [ "$preservefn" == "true" ] then mv -i "$filename" """$newfilename""_""$filename""" echo "$wadissergebeurd" echo 'Original name added at the end' else mv -i "$filename" ""$newfilename""$doelextensie"" echo "$wadissergebeurd" fi ;; *.JPG|*.jpg|*.jpeg|*.JPEG) newnametemp="$(exiftool -a -s -CreateDate "$filename")" doelextensie=".jpg" if [ -z "$newnametemp" ] then wadissergebeurd="No exif date found, using last changed date" newfilename="$(stat -c %y "$filename" | sed -e 's/\................//g' -e 's/-//g' -e 's/://g' -e 's/ /_/g')" if [ -a ""$newfilename""$doelextensie"" ] || [ "$preservefn" == "true" ] then mv -i "$filename" """$newfilename"_"$filename""" echo "$wadissergebeurd" echo 'Original name added at the end' else mv -i "$filename" ""$newfilename""$doelextensie"" echo "$wadissergebeurd" fi else newfilename="$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/://g' -e 's/ /_/g')" newfilename="$(echo $newfilename | cut -c 1-15)" wadissergebeurd="Date taken from exif info" if [ -a ""$newfilename""$doelextensie"" ] || [ "$preservefn" == "true" ] then mv -i "$filename" """$newfilename"_"$filename""" echo "$wadissergebeurd" echo 'Original name added at the end' else mv -i "$filename" ""$newfilename""$doelextensie"" echo "$wadissergebeurd" fi fi ;; *) echo 'Not a *.jpg / *.png / *.mp4 / *.avi!' ;; esac done
Discussion