请注意,我不是在问如何将一堆文件的创建日期更改为给定日期。我想转移将日期乘以给定的时间量,例如 47732400 秒。
我可以使用touch
BASH 中的其他方法来实现这一点吗?
答案1
如果目标修改时间早于原始创建时间,touch 才会更改创建时间。
for f in ~/Desktop/*; do
old=$(stat -f %B -t %s "$f")
touch -t $(date -r $(($old - 1234567)) +%Y%m%d%H%M%S) "$f"
done
SetFile 总是会改变创建时间。它附带命令行工具包,可以从 Xcode 的偏好设置或苹果网站。
for f in ~/Desktop/*; do
old=$(stat -f %B -t %s "$f")
new=$(date -r $(($old + 1234567)) '+%m/%d/%Y %H:%M:%S')
SetFile -d "$new" -m "$new" "$f"
done
stat -f %B -t %s
:格式化出生时间,时间格式自纪元以来的秒数
date -r
:重新格式化自纪元以来的秒数
touch -t
:更改访问和修改时间
SetFile -d
:更改创建时间
答案2
重复使用并增强以前的答案,使用参考文件/日期来改变文件日期(旧的 GoPro 总是将其时间重置为 2009 年...)
ref_file=GOPR3440.MP4
new_time_for_that_file=0327160015 #date's format: 27th March 2015, 16:00
ref_file_timestamp=`stat -f %B -t %s "$ref_file"`
new_time_timestamp=`date -j $new_time_for_that_file +%s`
time_diff=$[$new_time_timestamp - $ref_file_timestamp]
for f in *; do
old=$(stat -f %B -t %s "$f")
new=$(date -r $(($old + $time_diff)) '+%m/%d/%Y %H:%M:%S')
SetFile -d "$new" -m "$new" "$f"
done