我有一个包含多个图像和视频的图库文件夹,其中一些的修改日期正确,有些的月份错误。我想制作一个脚本,该脚本将更改某个文件夹中的所有文件,修改月份为一月到六月(或任何其他类似的组合)示例:
我的图像日期如下(EXIF 元数据不是名称):
05-Jan-2011
06-Jan-2011
07-Jan-2011
ETC...
我想保持年份和日期相同,但仅将所有月份更改为六月而不是一月。
所以它们变成了(EXIF 元数据而不是名称):
05-Jun-2011
06-Jun-2011
07-Jun-2011
ETC....
我怎样才能做到这一点 ?
提前致谢。
答案1
更新:如果我的答案有误,请立即告诉我。
我不确定file system's modification date
元数据是否等同于exitf modification date
元数据。我进行了测试exiftool
,日期是相同的,所以这让我觉得我可以用来touch
操作该元数据。
解决方案:
首先,您应该使用命令获取文件的修改日期stat
:
filedate=$(stat -c '%y' "/path/to/file" | cut -d' ' -f1)
现在该月份将被另一个月份取代。为此,您可以使用 awk:
newDate=$(awk -v month="Jun" -F '-' '{print $1"-"month"-"$3}' <<< $filedate )
使用touch
命令您可以更改修改日期:
touch -m -d $newDate /path/to/file
#-m argument is used to change modification time
#-d is used to specify the new date
最后,如果您想递归地更改文件,您可以使用find
之前提供的代码应位于脚本文件中:
脚本.sh:
#! /usr/bin/env bash
filedate=$(stat -c '%y' "$1" | cut -d' ' -f1)
newMonth="Dec" #here you specify the month
newDate=$(awk -v month=$newMonth -F '-' '{print $3"-"month"-"$1}' <<< $filedate )
touch -m -d $newDate $1
并且find
您可以使用:
find /path/to/your_directory -type f -exec ./script.sh {} \;
如果要在 find 命令中指定月份,可以将其作为参数传递给 script.sh:
因此,代码现在变为:
脚本文件
#! /usr/bin/env bash
filedate=$(stat -c '%y' "$1" | cut -d' ' -f1)
newMonth="$2"
newDate=$(awk -v month=$newMonth -F '-' '{print $3"-"month"-"$1}' <<< $filedate )
touch -m -d $newDate $1
查找命令
find . -type f -exec ./script {} "Nov" \;