如何在Lion中更改文件的创建(st_birthtime)日期/时间?[重复]


10

touch(1)只能更改修改访问时间,而没有创建时间选项。行不通,至少在Lion上不行。

那么,如何更改创建时间,也称为“ 出生时间fstat(2)?没有相应的调用,utimes(2)并且似乎没有任何命令行工具可用于此。

我知道我可以将文件复制到新文件,然后将当前时间作为出生时间(然后删除原始时间),但是肯定有更好的方法吗?


1
touch -t yyyymmddhhmm $file确实会更改创建日期,但前提是它早于原始创建日期。
Lri 2012年

好点,@ Lri-确实有意义,因为它会更新mtime和atime,并且在创建文件之前无法访问或修改文件。但这不能让我设定新的创作时间。
Ingmar Hupp

您是要通过命令行还是仅在一般情况下而不是使用CLI来更改它?
daviesgeek

坦白地说,我希望您不能更改它,因为它肯定会击败整个领域?我也怀疑一些问题是出生时间/创建时间不是标准的文件系统功能。我认为,hfs在扩展属性中添加了它-因此,除非对实用程序进行了更新以认识到这一点,否则它们将无法对此做很多事情。

Answers:


6

touch -t 如果目标修改时间早于原始创建时间,那么也会更改创建时间。

SetFile可以将创建时间设置为在修改时间之前或将来。

-d date    Sets the creation date, where date is a string of the
           form: "mm/dd/[yy]yy [hh:mm:[:ss] [AM | PM]]" Notes:
           Enclose the string in quotation marks if it contains spa-
           ces. The date must be in the Unix epoch, that is, between
           1/1/1970 and 1/18/2038. If the year is provided as a two-
           digit year, it is assumed to be in the 21st century and
           must be from 00 (2000) through 38 (2038).

这会将创建时间设置为修改时间:

SetFile -d "$(GetFileInfo -m test.txt)" test.txt

SetFile和GetFileInfo是命令行工具包的一部分,可以从Xcode的首选项或developer.apple.com/downloads下载。


严格来说,“出生时间”(crtime)和ctime 它们是不同的(请参阅ZFS中的文件创建时间
G. Cito,2015年

当然,访问和修改时间通常是相同的-但出于不同的原因。在touchstat 手册页有详细信息。我很想知道OpenZFS for OSX以及OSX“本机”文件系统如何处理crtime字段,或有关各种OSX版本的stat报告crtime
G. Cito

-1

尝试:

cat filename > newfile
mv filename ~/.Trash/
mv newfile filename 

那应该工作。


1
您仍然需要删除原始文件。英格玛已经对此进行了介绍。
河马

糟糕,应该读得更好。但没有,没有更好的方法……
肖恩·弗赖塔格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.