การเคลื่อนที่ของอะตอมโดยประมาณในระบบไฟล์?


16

ฉันต้องย้ายไฟล์บางไฟล์จากระบบไฟล์หนึ่งไปยังอีกระบบภายใต้ Ubuntu อย่างไรก็ตามมันเป็นสิ่งสำคัญมากที่ไฟล์ไม่เคยมีอยู่เป็นไฟล์บางส่วนหรือไม่สมบูรณ์ที่ปลายทางอย่างน้อยไม่อยู่ภายใต้ชื่อไฟล์ที่ถูกต้อง

จนถึงตอนนี้ทางออกเดียวของฉันคือการเขียนสคริปต์ที่ใช้แต่ละไฟล์คัดลอกไปยังชื่อชั่วคราวที่ปลายทางจากนั้นเปลี่ยนชื่อ (ซึ่งฉันเชื่อว่าควรเป็นแบบอะตอม) ที่ปลายทางไปยังชื่อไฟล์ต้นฉบับและลบไฟล์ต้นฉบับ .

อย่างไรก็ตามการเขียนและการดีบักสคริปต์ดูเหมือนว่าเกินความจำเป็นสำหรับงานนี้ มีวิธีหรือเครื่องมือที่ทำสิ่งนี้ตามธรรมชาติอยู่แล้ว?


8
ฉันรู้สึกถึงปัญหา xy ทำไมคุณต้องการสิ่งนี้
henning - คืนสถานะโมนิก้า

3
@ Henning มีเหตุผลที่เป็นไปได้มากมายดังนั้นนี่เป็นคำถามที่ดี ตัวอย่างเช่นโปรแกรมที่พยายามประมวลผลไฟล์โดยอัตโนมัติโดยใช้ชื่อไฟล์ที่ตรงกับ regex บางตัว (แต่ไม่สามารถปิดการใช้งานชั่วคราวด้วยเหตุผลของระบบราชการ) หรืออาจเป็นระบบสำรองข้อมูลที่ใช้ไฟล์และจัดเก็บในสื่อที่คงทน แต่เป็นแบบเขียนอย่างเดียว
wizzwizz4

1
@ Henning ฉันต้องการมันเพราะฉันมีแคชจำนวนมากที่อ่านจากที่เก็บต่าง ๆ แต่มีอันหนึ่งใกล้ความจุและต้องถูกลบออกจากบริการ ดังนั้นจึงจำเป็นที่แต่ละไฟล์ถ้ามีอยู่ในตำแหน่งใด ๆ จำเป็นต้องสมบูรณ์และไม่เปลี่ยนแปลง มิฉะนั้นจะมีสภาวะการแย่งชิงระหว่างการถ่ายโอนเริ่มต้นและสิ้นสุดที่แคชอาจคว้า (และเก็บ) ไฟล์ที่ไม่สมบูรณ์
Niels2000

คำตอบ:


27

rsyncคัดลอกไปยังชื่อไฟล์ชั่วคราว (เช่นดูRsync ชั่วคราวไฟล์นามสกุลและrsync - มันสร้างไฟล์ชั่วคราวในระหว่างการถ่ายโอน? ) เว้นแต่คุณจะใช้--inplaceตัวเลือก มันเปลี่ยนชื่อพวกเขาหลังจากที่ไฟล์ได้รับการถ่ายโอนเรียบร้อยแล้ว rsyncลบไฟล์ปลายทางใด ๆ ที่ถูกถ่ายโอนเพียงบางส่วนเท่านั้น (เช่นเนื่องจากดิสก์เต็มหรือข้อผิดพลาดอื่น ๆ )

นอกจากนี้ยังมี--remove-source-filesตัวเลือกที่จะลบไฟล์ต้นฉบับหลังจากถ่ายโอนสำเร็จแล้ว ดูrsyncหน้าคนสำหรับรายละเอียดเพิ่มเติม

เมื่อรวมทั้งหมดเข้าด้วยกันคุณสามารถใช้สิ่งต่อไปนี้:

rsync -ax --remove-source-files source/ target/

ตัวเลือกนี้มีประโยชน์อย่างยิ่งสำหรับงานต่าง ๆ เช่นการย้ายไฟล์ออกจากคิว "ขาเข้า" หรือคล้ายกับไดเรกทอรีที่จะประมวลผล

หรือถ้านี่เป็นมิเรอร์ครั้งเดียวบางทีก็ใช้rsyncโดยไม่มี--remove-source-filesตัวเลือก คุณสามารถลบไฟล์ต้นฉบับได้ในภายหลังหากคุณต้องการ / ต้องการ


ฉันคิดว่าจะมีเครื่องมือที่ดีสำหรับงาน ขอบคุณ!
Niels2000

@ Niels2000 ฉันจำไม่ได้ว่าเคยใช้ตัวเลือก rsync นั้นมาก่อน แต่สิ่งที่คุณต้องการฟังดูเหมือนสิ่งที่rsyncสามารถทำได้และฉันรู้ว่ามันถ่ายโอนไฟล์ด้วยชื่อ temp (เว้นแต่คุณจะใช้--inplace) ดังนั้นฉันจึงมอง ในและพบว่า man rsync เป็นเครื่องมือที่ดีในการตรวจสอบก่อนสำหรับเกือบทุกงานการถ่ายโอนไฟล์ --remove-source-filesrsync
cas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.