在 Mac OS 中更改文件夹(以及递归包含的项目)的创建和最后修改日期的最简单方法是什么?
6 回答
我不确定这是小牛队的问题还是什么,但touch -mt
或者touch -t
只是更新修改后的时间和上次打开的时间。
也许touch -mt
ORtouch -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' *
参考
我相信以下查找/触摸应该有效:
find /target/dir -exec touch '{}' \;
来自man touch
:
touch -- change file access and modification times
最简单的方法是使用终端:
// to change the creation date
touch -mt 201308030000 [pathtofile][filename]
// to change the modified date
touch -t 201308030000 [pathtofile][filename]
日期/时间字符串是这样构建的:
- 年份YYYY
- 月MM
- 第一天
- 小时_
- 分钟毫米
编辑
对于递归部分,请使用anubhava 在他的回答中建议的内容:
find [path] -exec touch -t 201308030000 {} \;
对于那些没有安装 XCode 或开发者工具而无法使用的人SetFile
,见下文
touch -m abc.txt
设置当前时间为 abc.txt 的修改时间touch -mt YYYYMMDDhhmm abc.txt
设置 YYYYMMDDhhmm 为 abc.txt 的修改时间touch -t YYYYMMDDhhmm abc.txt
将 YYYYMMDDhhmm 设置为 abc.txt 的访问时间和修改时间- 更重要的是,
touch
命令并非旨在更改文件创建时间。看来,创建时间不是 UNIX 的概念。touch
用于更改文件访问和修改时间。参见手册页touch
。
那么为什么touch
只更改创建时间几次呢?原因是修改时间不能小于创建时间。因此,当我们将修改时间设置为创建时间之前的日期时,创建时间也设置为修改时间。现在有两件事。
touch -t
比创建时间更早的日期,将创建和修改时间都设置为更早的日期。touch -t
比创建时间更新的日期,仅将修改时间设置为更新的日期。创建时间将不受影响。可以达到最佳创建时间cp oldfile newfile
,因此将newfile
当前时间作为创建时间,然后可以再次减少touch -t
SetFile
适用于任何日期。如果它不用PATH
作
xcrun SetFile -d '12/31/2099 23:59:59' abc.txt
从终端:
a) 创建日期:
touch –t YYYYMMDDhhmm theFile
b) 修改日期:
touch –mt YYYYMMDDhhmm the File
例子:
touch –t 201308021025 theFile.txt
touch –mt 201308021026 theFile.txt
如果您需要对一组文件执行操作,请使用 find & xargs
在 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
}