Mac OS更改创建和文件夹的上次修改日期

时间:2013-08-03 08:19:04

标签: macos

在Mac OS中更改文件夹(以及递归包含的项目)的创建和最后修改日期的最简单方法是什么?

6 个答案:

答案 0 :(得分:16)

我不确定这是小牛队的问题还是什么,但是touch -mttouch -t只是更新修改后的和上次开放的时间。

可能touch -mt OR touch -t命令与10.8.4及更早版本一起使用。

对于小牛队,我找到了如下解决方案。

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' *

Reference

答案 1 :(得分:8)

我相信以下发现/触摸应该有效:

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

来自man touch

touch -- change file access and modification times

答案 2 :(得分:7)

最简单的方法是使用终端

// 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 suggested in his answer

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

答案 3 :(得分:2)

从终端:

a)创建日期:

touch –t YYYYMMDDhhmm theFile

b)修改日期:

touch –mt YYYYMMDDhhmm the File

示例:

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

如果您需要对一组文件执行操作,请使用find& xargs的

答案 4 :(得分:2)

对于未安装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用于更改文件访问和修改时间。请参阅touch的{​​{3}}页面。
  5. 然后为什么touch只会改变创作时间?原因是修改时间不能较小而不是创建时间。 因此,当我们将修改时间设置为创建时间之前的某个日期时,创建时间也会设置为修改时间。现在有两件事。

    1. touch -t到比创建时间更早的日期,将创建和修改时间都设置为旧日期。
    2. touch -t比创建时间更新的日期,仅将修改时间设置为较新的日期。创作时间不受影响。 cp oldfile newfile可以达到最佳创建时间,因此newfile将当前时间作为创建时间,然后可以使用touch -t
    3. 再次缩短创建时间

      SetFile适用于任何日期。如果它不在PATH用作
       xcrun SetFile -d '12/31/2099 23:59:59' abc.txt

答案 5 :(得分:0)

在运行于27英寸iMac(2019年末型号)的最新macOS Big Sur 11.0.1中,通过命令“ 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
}