首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hours.Minutes.Seconds批量重命名电影文件使用EXIFTOOL作为日期时间格式递归地[年-月-日][DayofWeek][ BASH ].extention

Hours.Minutes.Seconds批量重命名电影文件使用EXIFTOOL作为日期时间格式递归地[年-月-日][DayofWeek][ BASH ].extention
EN

Stack Overflow用户
提问于 2016-05-28 05:17:06
回答 1查看 1.3K关注 0票数 1

我想整理我的全家福和电影。我有一个示例代码,但是在BASH code和EXIFTOOL by Phil Harvey中,我不能使用-tr或-sed命令交换文件名中的字符。有谁有主意吗?

代码语言:javascript
运行
复制
#!/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
EN

回答 1

Stack Overflow用户

发布于 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将根据指定的标记(MediaCreateDateDateTimeOriginal)重命名文件。对同一标记的早期赋值(在本例中为Filename )将被后续赋值覆盖,因此如果存在DateTimeOriginal,则将使用它,否则将使用MediaCreateDate。如果这两个项目都不存在,则会出现一个小错误,并且不会重命名该文件。如果具有该名称的文件已经存在,也会发生同样的情况,但是可以将%%c添加到日期格式字符串中,以便在文件名中添加一个递增数字。

要注意的一件事是,视频文件中的MediaCreateDate应该设置为协调世界时,读取它的程序应该将时间戳调整为本地时间。请参阅Quicktime tags page上的第四段。但并不是所有的相机,通常是较老的相机,都会正确设置它。Exiftool将按原样返回时间戳,这可能不正确。如果您希望exiftool将其调整为本地时间,则可以添加-api QuickTimeUTC option

下面是我使用testname而不是filename的一些示例输出。

代码语言:javascript
运行
复制
'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添加到子目录中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37492380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档