![根据文件名中的日期更改文件的修改日期](https://linux22.com/image/6583/%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD%E7%9A%84%E6%97%A5%E6%9C%9F%E6%9B%B4%E6%94%B9%E6%96%87%E4%BB%B6%E7%9A%84%E4%BF%AE%E6%94%B9%E6%97%A5%E6%9C%9F.png)
我有一个充满照片的目录,其文件名采用以下格式:
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 中使用正则表达式进行测试。