我正在使用CentOS 5.5,并想在一个卷中移动大量文件夹,并保留它们的位置mtime
。
我能找到的最佳解决方案是这样的:
cp -p -r source/data target/
rm -rf source/data
在NFS共享上拥有超过1TB的数据时,复制将永久进行。我不想复制。我要立即行动。
当我使用移动文件夹时mv source/data target/
,该mtime
文件夹(而非文件)的设置为当前时间。这是因为此操作会修改我正在移动的文件夹的内容(该..
条目指向另一个inode)。
我想出了一个我称之为的以下shell脚本mv_preserve_mtime.sh
:
#!/bin/bash
# Moves source folder to target folder.
# You are responsible for making sure the target does not exist, otherwise this blows up
export timestamp=`stat -c %y $1`
mv "$1" "$2"
touch --date="${timestamp}" $2
好吧,那也不起作用。文件夹的mtime
已还原,但是我移动的文件夹中的所有文件夹(仅深1级的文件夹)mtime
由于我不明白的原因而被重置。
有没有人有适当,有效和正确的解决方案?
@吉尔斯:我不知道为什么会这样。这是
—
Roman Zenka 2010年
mv
引起麻烦的步骤。NFS服务器实际上是NetApp存储,我对其内部几乎一无所知。
谢谢。我怀疑这是NetApp的怪胎。否则
—
吉尔(Gilles)“所以,别再邪恶了”
touch
应该工作了。顺便说一句,更便携touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp
。
@吉尔斯:非常有趣,没意识到
—
罗曼·曾卡(Roman
stat
不是可移植的。
touch
。是更改子目录的mtime 的mv
步骤还是touch
步骤?NFS服务器上使用什么操作系统,以及(如果知道)什么文件系统类型?