มีสองวิธีในการแทนที่ไฟล์ด้วยเวอร์ชันใหม่:
สร้างไฟล์ชั่วคราวด้วยเวอร์ชันใหม่จากนั้นย้ายไปไว้ที่เดิม
- ข้อได้เปรียบ: หากโปรแกรมเปิดไฟล์นั้นก็จะอ่านเนื้อหาเก่าหรือเนื้อหาใหม่ขึ้นอยู่กับว่าเปิดไฟล์ก่อนหรือหลังการย้าย ไม่มีการมิกซ์
- ข้อได้เปรียบ: ในกรณีที่เกิดความผิดพลาดเนื้อหาเก่าจะถูกเก็บไว้
- ข้อเสีย: เนื่องจากไฟล์ใหม่ถูกสร้างขึ้นคุณลักษณะของไฟล์ (ความเป็นเจ้าของสิทธิ์ ฯลฯ ) จะไม่ถูกสงวนไว้
เขียนทับไฟล์เก่าแทน
- ข้อดี: คุณลักษณะของไฟล์จะถูกเก็บรักษาไว้
- ข้อเสีย: ในกรณีที่เกิดความผิดพลาดไฟล์อาจถูกเขียนทับครึ่ง
- ข้อเสีย: หากโปรแกรมเปิดไฟล์เมื่อมีการอัพเดทโปรแกรมนี้อาจอ่านข้อมูลที่ไม่สอดคล้องกัน
หากคุณสามารถใช้วิธีที่ 1 cp -p --attributes-only
แต่ทำซ้ำครั้งแรกแอตทริบิวต์ของไฟล์ต้นฉบับด้วย สิ่งนี้ต้องใช้ GNU coreutils (เช่น Linux ที่ไม่ได้ฝังตัวหรือมีสภาพแวดล้อมคล้าย Linux เพียงพอ) หากคุณcp
ไม่มี--attributes-only
ให้ละเว้นตัวเลือกนี้: มันจะใช้งานได้ แต่มันจะทำซ้ำข้อมูลเช่นกัน
tmp=$(mktemp)
cp -p --attributes-only "$original" "$tmp"
modifyfile "$original" "$tmp"
mv -f "$tmp" "$original"
หากคุณไม่สามารถทำซ้ำคุณสมบัติของไฟล์ที่มีอยู่ตัวอย่างเช่นเนื่องจากคุณมีสิทธิ์ในการเขียน แต่ไม่ได้เป็นเจ้าของและคุณต้องการรักษาเจ้าของไว้วิธีที่ 2 จึงเป็นไปได้ เพื่อลดความเสี่ยงของการสูญหายของข้อมูล:
- ทำให้หน้าต่างในระหว่างที่ไฟล์จะไม่สมบูรณ์มีขนาดเล็กที่สุด เตรียมข้อมูลก่อนในไฟล์ชั่วคราวจากนั้นคัดลอกลงในสถานที่
- ทำสำเนาสำรองของไฟล์เก่าก่อน
tmp=$(mktemp)
backup="${original}~"
modifyfile "$original" "$tmp"
cp -p "$original" "$backup"
cp -f "$tmp" "$original"