根据文件名中的日期更改文件的修改日期

根据文件名中的日期更改文件的修改日期

我有一个充满照片的目录,其文件名采用以下格式: IMG-20160305-WA0001.jpg.拍摄日期明显在文件标题中。不幸的是,所有文件的修改日期都是今天。我想将它们设置回正确的日期。

我正在考虑一个bash脚本,它可以提取名称中的日期部分,然后依次提取touch -a -m -t 201603050900 IMG-20160305-WA0000.jpg每个文件的日期部分(为每个文件使用正确的日期)。一天中的时间并不重要。

答案1

bash仅使用字符串操作来提取日期的示例:

#!/bin/bash

for name in IMG-[0-9]*.jpg; do
    touch -amt ${name:4:8}0900 "$name"
done

答案2

从您的示例来看,假设所有文件一个有效的yyyymmdd日期,您可以从文件名中提取日期并将其应用到引用的命令中:

#!/bin/bash
for name in IMG-*-W*.jpg
do
    date="$(echo "$name" | sed -e 's/^IMG-//' -e 's/-W.*//')"
    touch -a -m -t ${date}0900 "$name"
done

如果某些文件没有有效日期,则需要更多工作。但您可以在 bash 中使用正则表达式进行测试。

相关内容