如何在Mac OS中最简单地更改文件夹(以及递归包含的项目)的创建和最后修改日期?
如何在Mac OS中最简单地更改文件夹(以及递归包含的项目)的创建和最后修改日期?
我不确定这个问题是与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' *
SetFile -d "$(GetFileInfo REFERENCEFILE | grep created | cut -c10-)" TARGETFILE
。 - Tim我相信以下的find/touch应该可以起作用:
find /target/dir -exec touch '{}' \;
来自man touch
:
touch -- change file access and modification times
find path | xargs -I {} touch {}
看起来更简单。 - Simon Ndunda// to change the creation date
touch -mt 201308030000 [pathtofile][filename]
// to change the modified date
touch -t 201308030000 [pathtofile][filename]
编辑
对于递归部分,请使用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
的man页面。那么为什么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
修改日期:
touch –mt YYYYMMDDhhmm the File
示例:
touch –t 201308021025 theFile.txt
touch –mt 201308021026 theFile.txt
如果你需要对一组文件进行操作,可以使用find和xargs命令。
### 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
}