重命名文件,但在UNIX中保留原始创建,修改时间

时间:2011-06-21 08:24:17

标签: unix solaris file-rename

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

提前致谢。

4 个答案:

答案 0 :(得分:4)

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

你会得到一个新的inode ......你不会用mv

答案 1 :(得分:1)

您可以使用cp -p然后删除原始内容。

答案 2 :(得分:0)

其他人建议的主题变体:

cp -al "$oldname" "$newname"
unlink "$oldname"
只要$ oldname和$ newname在同一个挂载点(文件系统)上,

就应该避免任何复制。


你很幸运。

Solaris(带有ZFS)是实际为文件创建时间属性的极少数文件系统之一。

现在关于主题:不,你不能保留所有时间:inode将改变,文件名也会改变。这意味着inode ctime将改变(POSIX)定义。

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

我认为没有办法改变这种状况。但是,文件创建日期时间根本不应更改。 我将展示显示创建时间的命令,但不幸的是我没有方便的Solaris盒子,我似乎无法找到它。我认为你最好的选择是man ls find stat

GL

答案 3 :(得分: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"