在Mac OS中更改文件夹(以及递归包含的项目)的创建和最后修改日期的最简单方法是什么?
答案 0 :(得分:16)
我不确定这是小牛队的问题还是什么,但是touch -mt
或touch -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' *
答案 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]
日期/时间字符串的构建方式如下:
修改强>
对于递归部分,请使用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
的用户,请参阅下文
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
的{{3}}页面。然后为什么touch
只会改变创作时间?原因是修改时间不能较小而不是创建时间。 因此,当我们将修改时间设置为创建时间之前的某个日期时,创建时间也会设置为修改时间。现在有两件事。
touch -t
到比创建时间更早的日期,将创建和修改时间都设置为旧日期。 touch -t
比创建时间更新的日期,仅将修改时间设置为较新的日期。创作时间不受影响。 cp oldfile newfile
可以达到最佳创建时间,因此newfile
将当前时间作为创建时间,然后可以使用touch -t
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
}