linux/shell:相对更改文件的修改时间戳?

linux/shell:相对更改文件的修改时间戳?

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 一样开派对。

相关内容