IMG_1234.JPG
我的相机生成了类似和 的文件MVI_1234.AVI
,这些文件上有时间戳。不幸的是,时间设置不正确,时间戳不准确。
我想在磁盘上设置文件的时间戳。(而不是 EXIF 数据)。
建议算法:
1 read file's modify date
2 add delta, i.e. hhmmss (preferred: change timezone)
3 write new timestamp
有没有简单的方法可以做到这一点?也许可以使用纪元时间(自那时以来的秒数)简化计算并编写一个 shell 脚本。
答案1
touch
可以这样做:
$ ls -l something
-rw-rw-r-- 1 tgs tgs 0 2010-03-22 16:03 something
$ touch -r something -d '-1 day' something
$ ls -l something
-rw-rw-r-- 1 tgs tgs 0 2010-03-21 16:03 something
http://linux.about.com/library/cmd/blcmdl_touch.htm
要更改修改时间,请添加--time=mtime
答案2
结合以上内容,如果 AM/PM 错误......
更正文件时间戳:
#!/bin/sh
for i in all/*; do
touch -r "$i" -d '-12 hour' "$i"
done
然后将 jpg 文件中的 EXIF 信息更新为更正的时间戳:
$ jhead -dsft *.jpg
不要忘记修正相机的时间设置。
答案3
迭代子目录中的所有文件:使用 stat 获取文件纪元/unix 时间(以秒为单位),让 touch 将总和解析为 mtime 的新日期并写入文件
#!/bin/sh
for i in all/*; do
touch -m -d "$(stat -c %y "$i") + 3600 sec" "$i"
done
对于 Python 的方法,请参见https://stackoverflow.com/questions/1158076/implement-touch-using-python
答案4
Linux,使用 touch 更改最后修改的时间戳:
创建一个带有现在时间戳的文件:
el@apollo:~$ touch myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Aug 22 09:25 myfile.txt
将时间戳更改为2小时前:
el@apollo:~$ touch -d "2 hours ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Aug 22 07:25 myfile.txt
将时间戳更改为200小时前:
el@apollo:~$ touch -d "200 hours ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Aug 14 01:25 myfile.txt
将时间戳更改为30天前:
el@apollo:~$ touch -d "30 days ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Jul 23 09:25 myfile.txt
el@apollo:~$
对于恶作剧,请将最后修改日期设置为未来日期:
el@apollo:~$ touch -d "-400000 days ago" myfile.txt
el@apollo:~$ ll myfile.txt
-rw-rw-r-- 1 el el 0 Oct 21 3012 myfile.txt
显然,我们今晚要像 3012 一样开派对。