我正在使用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
由于我不明白的原因而被重置。
有没有人有适当,有效和正确的解决方案?
POSIXmv
没有提供任何要求保留时间/时间的选项,但是由于该操作是同一卷的本地操作,因此您可以要求cp
使用硬链接,而不是使用以下-l
选项来复制常规文件的数据:
cp -p -r -l source/date target/
rm -rf source/data
由于只复制目录和文件引用,因此它应该快得多:
有关硬链接的更多信息,您可以查阅相应的Wikipedia页面
至于为什么使用当前解决方案重置子目录mtime,这是因为仅获取并还原了父目录mtime:touch不是递归命令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句