我想整理我的全家福和电影。我有一个示例代码,但是在BASH code和EXIFTOOL by Phil Harvey中,我不能使用-tr或-sed命令交换文件名中的字符。有谁有主意吗?
#!/bin/bash
# scan the files you need
for i in *jpg *mov *jpeg *mpg; *avi *mp4 do
# Get the extension of the file
extension=${i##*.}
# Extract metadata from the file
datetime=$( exiftool -f -s3 -"DateTimeOriginal" "${i}" )
# If the datetime value is empty (returned '-' because of the '-f' option)
# then read another tag
if [ "${datetime}" = '-' ]; then
datetime=$( exiftool -f -s3 -"MediaCreateDate" "${i}")
fi
# Construct the new filename from the metadata gathered above
newfilename="${datetime}.${extension}"
# Check if the destination filename already exists, and if not,
# create the file
if [ ! -e "${newfilename}" ]; then
echo mv -v "${i}" "${newfilename}"
else
echo "${i} would get renamed to ${newfilename} but that file already exists."
fi
done发布于 2016-05-28 07:53:42
脚本不是必需的,Exiftool可以自己完成。
您的命令将如下所示:
exiftool -ext jpg -ext mov -ext jpeg -ext mpg -ext avi -ext mp4 -d '[%Y-%m-%d][%A] [%H.%M.%S].%%e' '-Filename<MediaCreateDate' '-Filename<DateTimeOriginal' FileOrDir
-ext (-extension) option限制要操作的文件扩展名。
-d (-dateFormat) option及其后面的格式字符串告诉Exiftool日期/时间类型标记使用哪种格式。在Common Date Format Codes下可以找到更多信息。
接下来的两个选项告诉exiftool将根据指定的标记(MediaCreateDate或DateTimeOriginal)重命名文件。对同一标记的早期赋值(在本例中为Filename )将被后续赋值覆盖,因此如果存在DateTimeOriginal,则将使用它,否则将使用MediaCreateDate。如果这两个项目都不存在,则会出现一个小错误,并且不会重命名该文件。如果具有该名称的文件已经存在,也会发生同样的情况,但是可以将%%c添加到日期格式字符串中,以便在文件名中添加一个递增数字。
要注意的一件事是,视频文件中的MediaCreateDate应该设置为协调世界时,读取它的程序应该将时间戳调整为本地时间。请参阅Quicktime tags page上的第四段。但并不是所有的相机,通常是较老的相机,都会正确设置它。Exiftool将按原样返回时间戳,这可能不正确。如果您希望exiftool将其调整为本地时间,则可以添加-api QuickTimeUTC option。
下面是我使用testname而不是filename的一些示例输出。
'X:/!temp/0615090217.jpg' --> 'X:/!temp/[2009-06-15][Monday] [02.17.00].jpg'
'X:/!temp/2013-07-18_12.19.38 - Copy.Jpg' --> 'X:/!temp/[2013-07-18][Thursday] [12.19.38].Jpg'
'X:/!temp/DSC_7689 after.JPG' --> 'X:/!temp/[2006-08-19][Saturday] [09.13.28].JPG'
'X:/!temp/FujiFilmFinePixF200EXR_F0Standard (Provia).jpg' --> 'X:/!temp/[2009-01-25][Sunday] [14.10.46].jpg'
'X:/!temp/FujiFilmFinePixS5Pro.jpg' --> 'X:/!temp/[2006-12-20][Wednesday] [07.20.58].jpg'
'X:/!temp/IMGP0713-XL.jpg' --> 'X:/!temp/[2011-03-10][Thursday] [14.10.54].jpg'
'X:/!temp/IMGP0852.jpg' --> 'X:/!temp/[2003-04-20][Sunday] [16.36.53].jpg'
'X:/!temp/IMG_0938.JPG' --> 'X:/!temp/[2000-01-02][Sunday] [03.04.10].JPG'
'X:/!temp/RCNX0001.JPG' --> 'X:/!temp/[2015-12-20][Sunday] [09.09.05].JPG'
'X:/!temp/Test1.mp4' --> 'X:/!temp/[2015-12-25][Friday] [15.46.15].mp4'
'X:/!temp/Test4.jpg' --> 'X:/!temp/[2010-07-05][Monday] [12.53.36].jpg'
'X:/!temp/Test4.mp4' --> 'X:/!temp/[2014-11-11][Tuesday] [11.11.11].mp4'
'X:/!temp/tif.jpg' --> 'X:/!temp/[2003-03-03][Monday] [03.03.03].jpg'
'X:/!temp/xyzzy.jpg' --> 'X:/!temp/[2012-04-04][Wednesday] [04.04.04].jpg'这假设在Linux/Mac下使用bash。在Windows CMD上,单引号将更改为双引号。将要递归的-r (-recurse) option添加到子目录中。
https://stackoverflow.com/questions/37492380
复制相似问题