如何从Linux中的文件名更改文件的时间戳?

时间:2015-07-10 23:20:11

标签: linux touch

我有一组我从巡演中得到的图像。文件名具有嵌入的时间戳(例如," 2015-07-04-15-02-14.jpg")。可悲的是,他们所有的时间/日期都标有下载日期,而不是拍摄像素时。为了将它们整合到我在巡演期间拍摄的照片中,我想更改给定文件名的时间戳。 (这与人们通常需要的情况相反。)

这些文件都在他们自己的目录中,所以我需要读取整个目录并根据文件名中的字符触摸文件。

我不是Linux脚本专家,但如果有人可以帮我找出执行此操作的代码,我真的很感激。感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用相当简单的shell脚本执行此操作,该脚本使用您的命名约定来获取touch命令的时间戳值,例如,

#!/bin/sh
for file in $*
do
    test -f "$file" || continue
    ts=$(basename "$file" .jpg | sed -e 's/-//g')
    touch -t $ts $file
done

该脚本使用basename去除“.jpg”后缀,然后使用sed删除所有短划线。您的剩余数字恰好与touch使用的时间戳值相同,因此它应该有效。

您可以使用这样的脚本

./myscript *.jpg

如果您希望看到它执行任何操作(可能的错误消息除外),您将添加一行ls(出于某种原因,GNU touch缺少提供的详细-v选项通过具有lncp)的可比实用程序:

ls -l $file

答案 1 :(得分:0)

请参阅touch的手册页 请参阅有用的选项

  

-a仅更改访问时间

     

-m只改变

     

修改时间-t STAMP           使用[[CC] YY] MMDDhhmm [.ss]代替当前时间