有没有办法在保留原始创建/修改/读取时间的同时重命名文件?这是在Solaris中发生的情况。提前感谢您。
我认为你不能使用mv
来做到这一点。但是,你可以使用cp -p
来实现;将文件复制到一个新名称,然后删除原始文件。 -p
标志会保留时间戳。
但是你会得到一个新的inode……而这是使用mv
不会发生的。
cp -al "$oldname" "$newname"
unlink "$oldname"
只要$oldname和$newname在同一挂载点(文件系统)上,就应该避免任何复制。
你很幸运。
Solaris(带有ZFS)是极少数实际为文件保留创建时间属性的文件系统之一。
现在回到主题:不,你不能保留所有时间:inode会改变,文件名也会改变。这意味着inode ctime将按照(POSIX)定义更改。
除非你运行noatime挂载点(zfs set atime = off),否则最后访问时间也会更改。
我认为没有办法改变这个。然而,文件创建日期时间应该完全不会改变。 我本来要展示显示创建时间的命令,但不幸的是,我手头没有Solaris盒子,而且我似乎找不到它。我想你最好是man ls find stat
。
祝好运
你可以使用cp -p
,然后删除原始文件。
touch(1)
将它们改回来。 - cnicutartouch命令可以强制修改文件的修改时间,但我不确定它是否适用于ZFS。如果您正在重命名大文件,则此方法比cp -p更低开销。以下是一个bash脚本:
oldFileTime=`find "$1" -maxdepth 0 -printf "%Ty%Tm%Td%TH%TM.%.2TS"`
mv "$1" "$2"
touch -t "$oldFileTime" "$2"