ผู้แก้ไขสามารถปฏิบัติตามกลยุทธ์หลายประการเพื่อบันทึกไฟล์ ตัวแปรหลักสองประการคือการเขียนทับไฟล์ที่มีอยู่หรือเพื่อเขียนไปยังไฟล์ใหม่และย้ายไปไว้ที่เดิม การเขียนไปยังไฟล์ใหม่และการย้ายไฟล์เข้าที่นั้นมีคุณสมบัติที่ดีที่ทุกเวลาการอ่านจากไฟล์จะทำให้คุณมีไฟล์เวอร์ชั่นสมบูรณ์ (หนึ่งในทันทีคืออันเก่าและถัดไปใหม่ในทันที) หากไฟล์ถูกเขียนทับมีเวลาในระหว่างที่ไม่สมบูรณ์ซึ่งเป็นปัญหาหากโปรแกรมอื่นเข้าถึงไฟล์นั้นหรือระบบล่ม
เห็นได้ชัดว่านาโนเขียนทับไฟล์ที่มีอยู่ สคริปต์ของคุณตรวจพบจุดเมื่อเขียนเสร็จแล้ว ( close_write
เหตุการณ์) และทำงานrsync
ที่จุดนั้น โปรดทราบว่า rsync เป็นไปได้ที่จะคว้าไฟล์เวอร์ชันที่ไม่สมบูรณ์ถ้าคุณบันทึกสองครั้งติดต่อกันอย่างรวดเร็วก่อนที่ rsync จะเสร็จงานจากการบันทึกครั้งแรก
ในทางกลับกันใช้กลยุทธ์การเขียนแล้วย้าย - บางสิ่งบางอย่างเพื่อผลของ
echo 'new content' >somefile.new
mv -f somefile.new somefile
เกิดอะไรขึ้นกับเวอร์ชันเก่าของไฟล์คือมันจะถูกลบไป ณ จุดที่ย้ายเวอร์ชั่นใหม่เข้าที่ ณ จุดนี้inotifywait
คำสั่งจะส่งคืนเนื่องจากไฟล์ที่ถูกบอกให้ดูไม่มีอยู่อีกต่อไป ( somefile
ไฟล์ใหม่เป็นไฟล์อื่นที่มีชื่อเหมือนกัน) หาก Vim ได้รับการกำหนดค่าให้สร้างไฟล์สำรองข้อมูลสิ่งที่จะเกิดขึ้นคือ
echo 'new content' >somefile.new
ln somefile somefile.old
mv -f somefile.new somefile
และinotifywait
ตอนนี้จะดูการสำรองข้อมูล
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกลยุทธ์การบันทึกไฟล์โปรดดูการอัพเดทสดขณะที่โปรแกรมกำลังทำงานอยู่ได้อย่างไร และสิทธิ์การใช้ไฟล์และการบันทึก
สามารถบอกเป็นกลุ่มเพื่อใช้กลยุทธ์การเขียนทับ: ปิดbackupcopy
ตัวเลือก ( :set nobackupcopy
) นี่คือความเสี่ยงตามที่ระบุไว้ข้างต้น
ในการจัดการทั้งประหยัดกลยุทธ์ดูไดเรกทอรีและกรองทั้งสองclose_write
และกิจกรรมสำหรับmoved_to
somefile
inotifywait -m -e close_write,moved_to --format %e/%f . |
while IFS=/ read -r events file; do
if [ "$file" = "somefile" ]; then
…
fi
done