CentOS 5.5を使用していますが、1つのボリューム内で大量のフォルダーを移動し、それらを保持したいと考えていmtimeます。
私が見つけることができる最善の解決策は次のとおりです:
cp -p -r source/data target/
rm -rf source/data
NFS共有に1TBを超えるデータがあるため、コピーには時間がかかります。コピーしたくない。瞬時に動きたい。
私が使用して、フォルダを移動するとmv source/data target/、mtimeフォルダ(ファイルではなく)のは、現在の時刻に設定されます。これは、移動中のフォルダの内容がこの操作によって変更されるためです(..エントリが別のiノードを指している)。
私は次のシェルスクリプトを思いつきました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理解できない理由でリセットされます。
誰かが適切で効率的で正しい解決策を持っていますか?
mv、トラブルの原因となるステップ。NFSサーバーは実際にはネットアップストレージです。その内部についてはほとんど何も知りません。
touchはうまくいくはずです。ちなみに、よりポータブルな方法がありますtouch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp。
statポータブルではないことに気づかなかった。
touchうまくいかなかったのかしら。それはmvステップやtouchサブディレクトリのファイルのmtimeを変更するステップ?NFSサーバーにはどのOSがあり、(知っている場合は)どのファイルシステムタイプですか?