Saya menggunakan CentOS 5.5 dan ingin memindahkan sejumlah besar folder dalam satu volume , mempertahankannya mtime
.
Solusi terbaik yang bisa saya temukan adalah seperti ini:
cp -p -r source/data target/
rm -rf source/data
Dengan lebih dari 1TB data pada bagian NFS, penyalinan akan berlangsung selamanya. Saya tidak ingin menyalin. Saya ingin bergerak instan.
Ketika saya memindahkan folder menggunakan mv source/data target/
, mtime
folder (bukan file) diatur ke waktu saat ini. Ini karena isi folder yang saya pindahkan dimodifikasi oleh operasi ini ( ..
entri menunjuk ke inode yang berbeda).
Saya datang dengan skrip shell berikut yang saya sebut 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
Yah, itu tidak berhasil juga. Folder mtime
dipulihkan, tetapi semua folder di dalam folder yang saya pindahkan (hanya yang sedalam 1 level) mendapatkan pengaturan mtime
ulang karena alasan yang saya tidak mengerti.
Adakah yang punya solusi yang tepat, efisien dan benar?
mv
langkah yang menyebabkan masalah. Server NFS sebenarnya adalah penyimpanan NetApp, saya hampir tidak tahu apa-apa tentang internalnya.
touch
seharusnya bekerja. Omong-omong cara yang lebih portabel akan touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp
.
stat
itu tidak portabel.
touch
tidak berhasil. Apakah inimv
langkah atautouch
langkah yang mengubah waktu subdirektori? OS apa yang ada di server NFS, dan (jika Anda tahu) tipe sistem file apa?