วิธีย้ายไฟล์โดยไม่สงวนสิทธิ์


42

ปัญหาคือฉันต้องการที่จะเห็นข้อผิดพลาดเมื่อย้ายไฟล์ แต่ไม่เห็นข้อผิดพลาดที่มีปัญหาสิทธิ์ กล่าวอีกนัยหนึ่ง - ฉันสนใจว่าไฟล์ไม่ได้ถูกส่งอย่างสมบูรณ์ แต่ไม่ต้องการเห็นข้อผิดพลาดเช่นนี้:

mv: ล้มเหลวในการรักษาความเป็นเจ้าของสำหรับ `/home/blah/backup/pgsql.tar.gz ': ไม่อนุญาตให้ใช้งาน

mv $backupfile $destination --ignore-permissionsดังนั้นผมจึงต้องการสิ่งที่ชอบ:

ไฟล์สำรองข้อมูลสามารถเป็นอะไรก็ได้ตั้งแต่ 1 MiB ถึง 5 GiB และถ่ายโอนผ่าน NFS


มันเกิดขึ้นกับอุปกรณ์ NTFS ที่เชื่อมต่อด้วย แต่นี่ไม่ใช่กรณีเดียว มันเกิดขึ้นในทุกกรณีหากคุณไม่มีสิทธิ์เปลี่ยนสิทธิ์หรือเป็นไปไม่ได้ (เช่นใน NTFS)
Nux

สิ่งนี้มีประโยชน์เมื่อพยายามย้ายไฟล์ที่ไม่ถูกย้ายเนื่องจากข้อผิดพลาดเกี่ยวกับการอนุญาต (เช่นเนื่องจากไฟล์ถูกเมานท์cifs)
Sridhar Sarnobat

คำตอบ:


56

mvเป็นเครื่องมือที่ผิดสำหรับงานนี้ คุณต้องการแล้วcp rmเนื่องจากคุณกำลังย้ายไฟล์ไปยังระบบไฟล์อื่นนี่คือสิ่งที่mvกำลังทำอยู่เบื้องหลังนอกจากmvนี้ยังพยายามรักษาบิตสิทธิ์การใช้ไฟล์และข้อมูลเจ้าของ / กลุ่ม นี่เป็นเพราะmvจะรักษาข้อมูลนั้นไว้หากมีการเคลื่อนย้ายไฟล์ภายในระบบไฟล์เดียวกันและmvพยายามที่จะทำงานแบบเดียวกันในทั้งสองสถานการณ์ เนื่องจากคุณไม่สนใจเกี่ยวกับการสงวนบิตการอนุญาตของไฟล์และข้อมูลเจ้าของ / กลุ่มอย่าใช้เครื่องมือนั้น ใช้cp --no-preserve=modeและrmแทน


5
ขอบคุณมันใช้งานได้ จบลงด้วยการทำ: cp --no-preserve=mode,ownership $backupfile $destinationตรวจสอบรหัสออกจากนั้นทำrm $backupfileทุกอย่างเรียบร้อย
Nux

22

เมื่อคุณย้ายไฟล์ภายในระบบไฟล์เดียวกันให้mvแยกไฟล์ออกจากตำแหน่งเดิมและแนบไฟล์ไปยังตำแหน่งใหม่ ข้อมูลเมตาเช่นการอนุญาตยังคงเหมือนเดิม เมื่อคุณย้ายไฟล์ไปยังระบบไฟล์อื่นให้mvคัดลอกไฟล์พยายามทำซ้ำข้อมูลเมตามากที่สุดเท่าที่จะทำได้และลบต้นฉบับ

เมื่อคุณย้ายไปยังระบบไฟล์อื่นและคุณไม่ต้องการจำลองข้อมูลเมตาจำนวนมากคุณอาจคัดลอกไฟล์แล้วลบต้นฉบับ

cp "$backupfile" "$destination" && rm "$backupfile"

ซึ่งจะรักษาสิทธิ์ของไฟล์ในระดับหนึ่ง (เช่นความสามารถในการอ่านได้ทั่วโลก, ความสามารถในการใช้งาน) เวลาในการแก้ไขไฟล์ไม่ได้ถูกสงวนไว้ ด้วยGNUcpคุณสามารถใช้--preserve=…ตัวเลือกในการ contol --preserve=mode,timestampsสิ่งที่เมตาดาต้าที่ถูกจำลองแบบละเอียดมากขึ้นเช่น

คุณสามารถใช้rsyncและบอกสิ่งที่คุณต้องการรักษา ตัวเลือก-aหมายถึง“ สงวนข้อมูลเมตาส่วนใหญ่” ซึ่งรวมถึงเจ้าของหากทำงานเป็นรูทเท่านั้น

rsync -a --no-owner --no-group --remove-source-files "$backupfile" "$destination"

rsyncปัญหาการทำงานได้อย่างดีเยี่ยม ฉันพยายามดิ้นรนที่จะย้ายอูบุนตูเก่ามาติดตั้ง CIFS rsync ของฉันไม่ได้รายงานความล้มเหลวในการย้ายไฟล์ แต่ไม่ได้ทำการย้ายไฟล์และเป็นเพียงการรายงานปัญหาการอนุญาต
Sridhar Sarnobat

+1 สำหรับrsyncการแก้ปัญหา!
MikeSchinkel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.