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があり、(知っている場合は)どのファイルシステムタイプですか?