วิธีการคัดลอกไฟล์ในระบบปฏิบัติการยูนิกซ์โดยไม่ต้องแก้ไขเวลาแก้ไขล่าสุด?


89

หากฉันคัดลอกไฟล์จากที่หนึ่งไปยังอีกที่หนึ่งโดยใช้cpการประทับเวลาในไฟล์ที่คัดลอกจะถูกตั้งค่าเป็นเวลาของการคัดลอก

มีวิธีหลีกเลี่ยงปัญหานี้ไหม?

ฉันต้องการคัดลอกไฟล์โดยไม่เปลี่ยนเวลาบันทึก

คำตอบ:


103

cp -pไม่หลอกลวง สำหรับ Linux :

-p เหมือนกับ --preserve=mode,ownership,timestamps

สำหรับ FreeBSD :

-p ทำให้ cp รักษาคุณสมบัติต่อไปนี้ของไฟล์ต้นฉบับแต่ละไฟล์ในเวลาคัดลอก: เวลาในการแก้ไข, เวลาในการเข้าถึง, แฟล็กไฟล์, โหมดไฟล์, ACL, ID ผู้ใช้และ ID กลุ่มตามที่ได้รับอนุญาต

และสำหรับ OS X :

-pทำให้ cp เพื่อรักษาคุณลักษณะต่อไปนี้ของไฟล์ต้นฉบับแต่ละไฟล์ไว้ในการคัดลอก: เวลาแก้ไข, เวลาในการเข้าถึง, แฟล็กไฟล์, โหมดไฟล์, ID ผู้ใช้และ ID กลุ่มตามที่ได้รับอนุญาตจากสิทธิ์ รายการควบคุมการเข้าถึง (ACLs) และคุณสมบัติเพิ่มเติม (EAs) รวมถึงส้อมทรัพยากรก็จะถูกรักษาไว้เช่นกัน


25
cp -a ยังเป็นสิ่งที่ดีที่จะรู้ว่ามันหมายถึงไม่เพียง แต่ -p แต่ยัง -R เพื่อคัดลอกไดเรกทอรีทั้งหมดและ -d เพื่อรักษาลิงก์
ชั่วคราว

2
โปรดทราบว่าเมื่อใช้ GNU Coreutils cp -pไม่เพียง แต่รักษาเวลาประทับ แต่ยังโหมดและความเป็นเจ้าของและในFreeBSDนอกเหนือจากเวลาการปรับเปลี่ยนมันยังรักษา»เวลาการเข้าถึงธงไฟล์โหมดไฟล์ ACL, ID ผู้ใช้และ ID กลุ่มตามที่ได้รับอนุญาต ตามการอนุญาต«และบนOS Xเพิ่มเติม»คุณสมบัติเพิ่มเติมรวมถึงส้อมทรัพยากร«
Stefan Schmidt

บน OSX ล่าสุด cp -p ยังคงสัมผัสเวลาประทับของไฟล์ต้นฉบับ
afathman

15

เมื่อใช้cpจากGNU Coreutilsเพื่อเก็บรักษาเฉพาะการประทับเวลาและไม่ใช่แอตทริบิวต์เช่น id ผู้ใช้, id กลุ่มหรือโหมดไฟล์มีระยะยาว--preserveที่อนุญาตให้ระบุรายการของคุณสมบัติที่จะรักษาไว้อย่างชัดเจน

cp --preserve=timestamps source destination

โปรดระวังว่าไวยากรณ์นี้อาจไม่รองรับใน Unices อื่น ๆ อีกทางเลือกหนึ่งคือใช้--timesพารามิเตอร์rsyncที่ควรมีอยู่ในการติดตั้งส่วนใหญ่


4
นี่คือคำตอบที่ถูกต้อง การใช้-pไม่ใช่คำตอบที่ถูกต้อง -pยังคงความเป็นเจ้าของ & โหมดด้วย ซึ่งอาจไม่เป็นที่ต้องการ .. และไม่ได้ถูกถามด้วยคำถาม
bshea

10

มีสามครั้งในระบบไฟล์ Unix เวลาเข้าถึง (atime) เวลาแก้ไข (mtime) และเวลาเปลี่ยน inode (ctime) คุณสามารถเปลี่ยนเวลาการเข้าถึงและเวลาการแก้ไขด้วยโปรแกรมสัมผัสตัวอย่างเช่น

cp orig copy
สัมผัส -r orig copy

อย่างไรก็ตามคุณไม่สามารถเปลี่ยนเวลาเปลี่ยน inode ได้



0

ฉันเพิ่งต้องการทำสิ่งที่คล้ายกัน แต่ใช้ symlink แทน ในการสร้าง symlink และรักษาเวลาประทับดั้งเดิม:cp -ps src_file dst_symlink


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