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

Jod*_*del 7 bash shell-script timestamps files

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

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

Gui*_*ido 9

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

#!/bin/bash

for name in IMG-[0-9]*.jpg; do
    touch -amt ${name:4:8}0900 "$name"
done
Run Code Online (Sandbox Code Playgroud)


Tho*_*key 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
Run Code Online (Sandbox Code Playgroud)

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