คัดลอกไฟล์เฉพาะเมื่อใหม่กว่าปลายทาง


36

ฉันจะคัดลอกไฟล์ใน Linux ได้อย่างไรเมื่อไฟล์ที่ถูกคัดลอกนั้นใหม่กว่ารุ่นที่ปลายทาง

หากไฟล์ที่ปลายทางนั้นใหม่กว่าฉันต้องการให้คัดลอกไฟล์ไม่ได้ไปข้างหน้า

คำตอบ:


54

การใช้ตัวเลือกการอัพเดท (-u) กับ cp ควรทำเพื่อคุณ

http://beginnerlinuxtutorial.com/help-tutorial/basic-linux-commands/cp-linux-copy-command/


19
หากต้องการบันทึกผู้อ่านในอนาคตสักครู่: คำถามนี้ถูกติดแท็ก Linux การใช้ cp ที่ไม่ใช่ของ GNU (BSD, macOS และอื่น ๆ ) ขาด-uตัวเลือก คุณสามารถใช้rsync --updateแทน
user31389

17

ใช้rsync

rsync --progress -r -u /from/one/* /to/another/directory

3
เพียงเพื่อความสมบูรณ์: -rหมายถึงการดำเนินการซ้ำในไดเรกทอรีย่อยและ-uเพื่อให้ไฟล์ใหม่ที่ปลายทาง (= update) --progressแสดงข้อมูลความคืบหน้าในระหว่างการดำเนินการ
Jörg Gottschlich

6

คุณไม่ได้พูดว่าคุณใช้เปลือกอะไรดังนั้นฉันจะถือว่าksh:

if [[ file1 -nt file2 ]]; then cp file1 file2; fi

ไม่ทุบตีมากที่สุด?
Rob

1
@ Rob ใช่ วิธีนี้ใช้ได้ผลเช่นกัน ฉันไม่ได้ทุบตี (หรือกล่องลินุกซ์มาตรฐาน) เมื่อฉันเขียนมัน
Kusalananda

4

yes|cp -ruv /from/* /to/.
ใช่ - ตอบว่าใช่สำหรับคำถามทั้งหมด
r - Recursive
u - อัพเดต
v - ความคืบหน้า

ทำงานเหมือนxargs

ฉันไม่รู้วิธีอธิบายเชิงวิชาการ

วิธีบังคับให้ cp เขียนทับโดยไม่มีการยืนยัน


1
นี่เป็นความลับ คุณสามารถขยายคำตอบของคุณให้ชัดเจนยิ่งขึ้นหรืออาจรวมถึงตัวอย่างได้หรือไม่? ขอบคุณ จากรีวิว
fixer1234

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