Mac OS更改文件夹的创建和最后修改日期

10

如何在Mac OS中最简单地更改文件夹(以及递归包含的项目)的创建和最后修改日期?


你想以编程方式(通过代码、Objective-C等)还是使用Applescript或其他方式来完成这个任务? - Michael Dautermann
4
为什么会有两个踩的?这是一个非常好的问题。 - P i
6个回答

18

我不确定这个问题是与Mavericks有关还是其他的原因,但是touch -mt或者touch -t只会更新修改和最后打开时间。

也许touch -mt或者touch -t命令在10.8.4及以前版本有效。

对于Mavericks,我找到了以下解决方案。

SetFile -d '12/31/1999 23:59:59' file.txt
            MM dd yyyy hh mm ss  fileName

要更新文件夹中的所有文件,只需使用

SetFile -d '12/31/1999 23:59:59' *

参考


1
要将文件的创建日期/时间设置为参考文件的日期/时间,请使用 SetFile -d "$(GetFileInfo REFERENCEFILE | grep created | cut -c10-)" TARGETFILE - Tim

10

我相信以下的find/touch应该可以起作用:

find /target/dir -exec touch '{}' \;

来自man touch

touch -- change file access and modification times

7
这并不会改变Finder报告的创建日期,只会修改日期(在OS X 10.9.1上观察到)。 - Pol
1
对我来说,find path | xargs -I {} touch {} 看起来更简单。 - Simon Ndunda

10
最简单的方法是使用终端:
// to change the creation date
touch -mt 201308030000 [pathtofile][filename]

// to change the modified date
touch -t 201308030000 [pathtofile][filename]

日期/时间字符串的格式如下:
  • 年份 YYYY
  • 月份 MM
  • DD
  • 小时 hh
  • 分钟 mm

编辑

对于递归部分,请使用anubhava在他的答案中建议的方法

find [path] -exec touch -t 201308030000 {} \;

1
这只会更改访问和/或修改时间,而不是创建时间。 - Tim

5

对于没有安装XCode或开发工具的人,因此无法使用SetFile的人,请参见以下内容

  1. touch -m abc.txt将当前时间设置为abc.txt的修改时间
  2. touch -mt YYYYMMDDhhmm abc.txt将YYYYMMDDhhmm设置为abc.txt的修改时间
  3. touch -t YYYYMMDDhhmm abc.txt将YYYYMMDDhhmm设置为abc.txt的访问和修改时间
  4. 更重要的是,touch命令不是设计用来更改文件创建时间的。看起来,创建时间不是UNIX概念。 touch用于更改文件访问和修改时间。请参见touchman页面。

那么为什么touch有时只更改创建时间?原因是修改时间不能小于创建时间。所以当我们将修改时间设置为早于创建时间的日期时,创建时间也会被设置为修改时间。

  1. touch -t到早于创建时间的日期,将创建时间和修改时间都设置为早于的日期。
  2. touch -t到比创建时间更新的日期,仅将修改时间设置为更近的日期。创建时间不受影响。最好的创建时间可以通过cp oldfile newfile达到,这样newfile的创建时间就是当前时间,然后可以再次使用touch -t将其减少。

SetFile适用于任何日期。如果没有在PATH中,则可以使用如下方式:
xcrun SetFile -d '12/31/2099 23:59:59' abc.txt


2

从终端开始:

a)创建日期:

touch –t YYYYMMDDhhmm theFile
修改日期:
touch –mt YYYYMMDDhhmm the File

示例:

touch –t 201308021025 theFile.txt
touch –mt 201308021026 theFile.txt

如果你需要对一组文件进行操作,可以使用find和xargs命令。


0
在最新的macOS Big Sur 11.0.1上运行27英寸iMac(2019年底型号),通过命令“ls -lt”和“ls -ltr”进行的目录列表完全相同,而不是相反。
因此,我决定使用命令“stat”生成与修改日期对应的整数数字,而不是使用不可靠的“ls”命令(如果我错了,请纠正我)。我已经在我的主目录中的.bashrc配置文件中创建了以下非递归函数,作为别名“moddate”随时准备在任何目录列表上执行,例如:“moddate *”表示当前目录中所有文件夹的修改日期。请注意,这里只有文件夹有意义,而不是文件。
### Update parent folder's modification date taken from the newest child folder nested within.
    
function moddate {

    dir_list=$@

    for path in $dir_list
    do
        if [[ -d "${path}" ]]; then
            latest=`stat -f '%m %N' ${path}/* | sort -k1rn | awk '{print $2; exit}'`
            ls -ld $latest
            (set -x; touch -r "${latest}" "${path}")
        fi
    done
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接