更改文件的创建日期


62

您能否让我知道如何更改Lion中文件的创建日期。我意识到这里有touch-t命令,但是在Lion中不起作用。有几个人提到了另一种方式,但是我认为他们已经用“编码器”语言而非外行语言编写了解决方案-有人能够以外行执行的方式回答该问题吗?

非常感谢您的帮助。


别人写的“编码器”说明可能是对“触摸”的引用。您必须打开终端,导航到文件所在的文件夹,然后使用touch命令修改国际剑联的创建日期。
德里克·奈特

2
FWIW您在“ touch-t”的右边,但是h和-之间有空格。这是“ touch -t”
Derek Knight

Answers:


95

touch -t通常只更改修改和访问时间。仅当目标时间早于原始创建时间时,它才会更改创建时间。

touch -t 199912312359 file.txt
touch -t $(date -jf %FT%T 1999-12-31T23:59:59 +%Y%m%d%H%M%S) file.txt

SetFile -d 总是会更改创建时间。

SetFile -d '12/31/1999 23:59:59' file.txt
SetFile -d "$(GetFileInfo -m test.txt)" file.txt

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


4
-m用于更改修改时间。
AlikElzin-kilaka 2014年

5
在优胜美地,触摸需要我使用格式+%Y%m%d%H%M.%S(请注意分钟和秒之间的点)
Calimo 2015年

我写了一个调用的函数CpCreationDatefishSetFile -d (GetFileInfo -m $argv[1]) $argv[2]
帕斯卡尔

15

在Mac OS X中,似乎有四个与文件关联的时间戳。这些时间戳并不总是彼此独立更新,而是一个可以有一些个别控制带着几分关心和利用的touchSetFilechown(或chmod)。为了看到这一点,让我们进行实验并在命令提示符下创建一个新文件#

# touch a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

列出的第一个日期是上次访问时间(atime),第二个是上次修改时间(mtime),第三个是上次状态更改(ctime),第四个是文件创建的时间(出生Btime),请参见man lstat

要将访问时间(atime)修改为指定时间,请使用:

# touch -a -t201412312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "May 19 00:11:14 2015" "May 19 00:11:46 2015" "May 19 00:11:14 2015" 4096 0 0 a.txt

要将修改时间(mtime文件创建时间()修改Btime为指定时间,请使用:

# touch -m -t201312312359.59 a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 2013" 4096 0 0 a.txt

显然,这还会自动将上次状态更改(ctime)的时间更新为当前系统时间!

要将创建/出生时间(Btime)仅修改为给定时间,请使用(如上述其他人所建议的):

# SetFile -d "12/31/1999 23:59:59" a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:12:19 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

要将最后一次状态更改时间(ctime)修改为当前系统时间,请使用例如:

# chown username a.txt
# stat a.txt
16777218 5969798 -rw-r--r-- 1 username staff 0 0 "Dec 31 23:59:59 2014" "Dec 31 23:59:59 2013" "May 19 00:13:45 2015" "Dec 31 23:59:59 1999" 4096 0 0 a.txt

username文件的所有者在哪里(由stat或报告ls -l)。这不会更改文件的所有权,但是会访问文件的inode并将其记录为上一次状态更改的时间。不幸的是,除了更改计算机的时间外,无法在此处明确指定时间。

总而言之,为了能够独立更改四个时间戳,可以使用一个(以最后三个为此顺序):

  1. touch -a -tCCYYMMDDHH.SS <file>
  2. touch -m -tCCYYMMDDHH.SS <file>
  3. SetFile -d "MM/DD/CCYY HH:MM:SS" <file>
  4. [设置系统日期] chown username <file>[恢复正常系统日期]

(当然,已警告您重置系统日期可能不是无风险的操作。)


+1感谢您提供这个超级详细的答案。这解决了我所有的麻烦。
Govind Rai

13

命令行touch命令可在Lion中使用,但是您需要一些有关如何使用它的背景知识。

首先,您需要输入它,它不是在窗口中以图形方式运行的实用程序。您在其中输入文字的地方是一个名为Terminal的应用程序。您可以在“实用程序”文件夹中找到它,或使用Spotlight搜索来找到它。

一旦启动它,您将获得一个命令行窗口,您可以在其中键入命令。仅仅因为您正在键入并不意味着它与编码有任何关系,但是对于“老式” OS命令的新手来说,它看起来有些吓人。

因此,该命令称为touch,在命令之后您可以传递各种参数,唯一需要的一个是文件名。键入以下内容会将文件的最后修改日期设置为当前时间:

touch filename

当然,您可能需要首先找到文件,这可能需要其他命令才能找到它。在CD更改目录命令在这里帮助:

cd ~/Desktop/files/PDFs
touch filename

或者,您可以简单地将完整路径添加到文件中,作为命令的一部分:

touch ~/Desktop/files/PDFs/filename

touch命令的更高级用法允许您指定要设置的时间,而不是使用执行时间,设置访问权限而不是修改时间等。这是-t等参数的作用。有人将时间设置为另一个文件的时间,有人将其设置为后退或按X量按时间前进(请参见此处以获取更多详细信息),例如:

touch -d '1 May 2005 10:22' file8

以下是该页面上的有用信息,也是一个很好的示例,其中包含一些技巧,适用于那些对命令行上的文件位置不满意的人

请注意,仅当在输入日期之后创建文件时,这才会更改修改日期和创建日期属性。这是因为在创建文件之前无法对其进行修改。如果在您设置的日期之前创建,则只会更改修改的日期。

如何更改文件的创建日期属性?

  1. 打开终端应用程序(/Applications/Utilities/Terminal.app),或者如果您愿意使用iTerm。

  2. 在终端中键入此内容(不打回车/返回),以以下格式插入日期YYYYMMDDhhmm

    touch -t 201212211111
    
  3. 打开“查找器”窗口,找到要修改的文件,然后将其拖放到“终端”窗口中,然后它将使用命令行术语插入文件位置。这是此时应在终端中键入的内容的示例:

    touch -t 201212211111 /Volumes/Mac\ HD/Pictures/somefile.jpg
    

    上例中的201212211111代表“ 2012年12月21日上午11:11


2
但是touch修改修改日期,而不是文件的创建日期。
丹尼尔

1
它可以同时做。取决于参数。
13年

2
使用上面touch提供的参数可以更改修改,但不能更改测试文件的创建日期。
丹尼尔

2
@Daniel您可能会得到答案,但是出于完整性考虑,touch 确实会根据参数修改创建日期。如果您提供的修改日期早于文件的创建日期,则创建日期将自动更改为新的修改日期值,因为在创建文件之前无法对其进行修改。
Govind Rai

2
我只是在Sierra上尝试过,触摸绝对不会更改creation日期。我能够改变accessmodified日期为“在过去的日期”,但它并没有修改创建日期。检查手册页是否有触摸,但未提及创建日期。文件系统:Mac OS扩展(日志,加密)。使用SetFile -d "$(GetFileInfo -m test.txt)" file.txt效果很好。
乔纳森·克罗斯

7

这里有一些很棒的提示,特别是最后一个提示(来自Lauri Ranta,8月21日15:21回答)。完美!

我现在使用一个简单的Automator工作流程来批量更改多个文件:

  1. 获取选定的查找器项目
  2. 运行Shell脚本,“将输入传递:作为参数”

Shell脚本是:

for f in "$@"
do
    SetFile -d "$(GetFileInfo -m "$f")" "$f" 
done

这就像一个魅力。


0

我发现最简单的方法是创建一个新文件夹,将变灰文件夹的所有子文件夹复制到新文件夹中,瞧,新文件夹没有变灰。您甚至可以在取景器中执行此操作。

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.