有没有办法在保留原始创建/修改/读取时间的同时重命名文件? 这是在Solaris。
提前致谢。
答案 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"