ฉันใช้ CentOS 5.5 และต้องการย้ายโฟลเดอร์จำนวนมากภายในโวลุ่มเดียวโดยคงไว้ที่mtime
เดิม
ทางออกที่ดีที่สุดที่ฉันเจอคือ:
cp -p -r source/data target/
rm -rf source/data
ด้วยข้อมูลมากกว่า 1TB ในการแบ่งปัน NFS การคัดลอกจะใช้เวลาตลอดไป ฉันไม่ต้องการคัดลอก ฉันต้องการย้ายทันที
เมื่อตอนที่ผมย้ายโฟลเดอร์โดยใช้mv source/data target/
ที่mtime
ของโฟลเดอร์ (ไม่ใช่ไฟล์) ได้รับการตั้งค่าให้เวลาปัจจุบัน นี่เป็นเพราะเนื้อหาของโฟลเดอร์ที่ฉันกำลังเคลื่อนย้ายได้รับการแก้ไขโดยการดำเนินการนี้ ( ..
รายการชี้ไปที่ไอโหนดอื่น)
ฉันมากับเชลล์สคริปต์ต่อไปนี้ฉันเรียกว่า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 เป็นที่เก็บข้อมูล NetApp จริง ๆ ฉันไม่รู้อะไรเลยเกี่ยวกับการใช้งานภายใน
touch
ควรทำงาน touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp
โดยวิธีการที่เป็นวิธีแบบพกพามากขึ้นจะ
stat
ว่าไม่ได้พกพา
touch
ไม่ทำงาน มันเป็นmv
ขั้นตอนหรือtouch
ขั้นตอนที่เปลี่ยน mtime ของไดเรกทอรีย่อยหรือไม่? ระบบปฏิบัติการใดที่อยู่บนเซิร์ฟเวอร์ NFS และ (ถ้าคุณรู้) ระบบไฟล์ประเภทใด