4

有没有办法在保持原始创建/修改/读取时间的同时重命名文件?这是在 Solaris 中。

提前致谢。

4

4 回答 4

8

我不认为你可以用mv. 但是,您可以使用cp -p; 将文件复制到一个新名称,然后删除原始文件。该-p标志保留时间戳。

不过,您将获得一个新的 inode……您不会使用的东西mv

于 2011-06-21T08:28:02.607 回答
2

在其他人建议的主题的变体中:

cp -al "$oldname" "$newname"
unlink "$oldname"

只要 $oldname 和 $newname 在同一个挂载点(文件系统)上,就应该避免任何复制。


你很幸运。

Solaris(带有 ZFS)是为数不多的真正尊重文件创建时间属性的文件系统之一。

现在讨论主题:不,您不能一直保留:inode 会改变,文件名也会改变。这意味着 inode ctime 将根据 (POSIX) 定义进行更改。

除非您正在运行 noatime 挂载点 (zfs set atime=off),否则您上次访问的时间也会发生变化。

我认为没有办法改变这种情况。但是,文件创建日期时间根本不应该更改。我打算显示命令以显示创建时间,但不幸的是我手边没有 Solaris 盒子,而且我似乎找不到它。我认为你最好的选择是man ls find stat

总帐

于 2011-06-21T08:38:19.910 回答
1

您可能可以使用cp -p然后删除原件。

于 2011-06-21T08:27:54.533 回答
0

touch 命令可以强制文件修改时间,但我不确定这是否适用于 ZFS。如果要重命名大文件,这比 cp -p 的开销要低。这是一个 bash 脚本:

oldFileTime=`find "$1" -maxdepth 0 -printf "%Ty%Tm%Td%TH%TM.%.2TS"`
mv "$1" "$2"
touch -t "$oldFileTime" "$2"
于 2012-11-07T22:23:32.087 回答