有没有办法在保持原始创建/修改/读取时间的同时重命名文件?这是在 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 命令可以强制文件修改时间,但我不确定这是否适用于 ZFS。如果要重命名大文件,这比 cp -p 的开销要低。这是一个 bash 脚本:
oldFileTime=`find "$1" -maxdepth 0 -printf "%Ty%Tm%Td%TH%TM.%.2TS"`
mv "$1" "$2"
touch -t "$oldFileTime" "$2"