ฉันจะคัดลอกไดเรกทอรี (ใหญ่) ไปยังอีกการเปลี่ยนแปลงเฉพาะไฟล์ที่แตกต่างได้อย่างไร


14

ฉันมีไดเรกทอรี a และไดเรกทอรี b พวกมันใหญ่ b เกือบจะเหมือนกันกับ "เกือบ" หมายความว่า 4-5 ไฟล์ต่างกันและฉันไม่รู้ว่ามันคืออะไร ฉันต้องการคัดลอก b ผ่าน a แต่เฉพาะไฟล์ที่แตกต่าง ฉันกำลังทุบตี

(ไม่ฉันไม่สามารถลบ a และแทนที่ด้วย b ได้เนื่องจาก 1) a เป็นเวอร์ชันที่ควบคุม 2) สำเนาแบบเต็ม (หรือ mv) จะใช้เวลามากเกินไป ฉันต้องการคัดลอกเฉพาะไฟล์ที่แตกต่างกัน)


คือrsyncตัวเลือก?
Bobby

มันคือ แต่ฉันไม่รู้เกี่ยวกับ rsync มากนัก
janesconference

คำตอบ:


17

คุณสามารถใช้rsyncเพื่อทำสิ่งนี้คำสั่งที่ฉันใช้คือrsync -tr "folder to copy from" "folder to copy to"

เช่น rsync -tr /home/me/stuff/* /home/me/otherstuff/


1
ระวังคำสั่งนี้ มันจะลบไฟล์ทั้งหมดที่ไม่แตกต่างกัน ฉันวิ่งแล้วก็แทบจะสูญเสียทุกสิ่งทุกอย่าง !!
Arvind K.

@Arvind ฉันไม่ทราบว่าคำสั่งที่คุณใช้ทำให้เกิดการสูญเสียข้อมูลของคุณ แต่มันไม่ใช่ rsync -tr อ่าน man page
Tog

18

นอกจากนี้ยังเป็นไปได้ที่จะทำเช่นนี้กับอายุที่ดีcp:

ขอบคุณ srcspider ที่เตือนให้ฉันใช้-T!

cp -ruT old-dir new-dir


+1 ฉันคุ้นเคยกับการซิงก์ข้ามเครื่องจักรฉันลืมวิธีที่สวยงาม
Tog

ใช้งานไม่ได้สำหรับฉัน :(
janesconference

นั่นเป็น gnu cp ที่ดีจริงๆ ;-)
Keith

1
บน OS X ตัวเลือก -u ไม่มีอยู่ ฉันเพียงแค่ใช้ cp -r old-dir new-dir เนื่องจากฉันไม่ต้องเปรียบเทียบวันที่
Jean-François Beauchamp

ไม่ทำงาน, ไม่เป็นผล. ฉันไม่แน่ใจว่านี่เป็นชื่อแบบแผน แต่ cp -ru folder-A folder-B จะคัดลอกโฟลเดอร์ A ในโฟลเดอร์ B หรือไม่คัดลอกเนื้อหาของ A inside B และเขียนทับซึ่งจะเป็นผลที่ต้องการ
srcspider

1

อีกตัวเลือกที่ดีคือ Unison ( http://www.cis.upenn.edu/~bcpierce/unison/ ) โดยเฉพาะอย่างยิ่งถ้าไม่มี "แหล่ง" และ "ปลายทาง" จริงๆ แต่ละไดเรกทอรีเป็นรูทและพร้อมเพรียงซิงค์และเก็บข้อมูลเมตาสำหรับการซิงค์ในอนาคต มันมีทั้งบรรทัดคำสั่งและตัวเลือก GUI ที่สามารถกำหนดเวลาได้อย่างง่ายดายผ่าน cron เช่นกัน

ฉันใช้มันเพื่อสำรองข้อมูล Dropbox ของฉันไปยังอุปกรณ์ NAS ในพื้นที่ของฉันซึ่งไม่สามารถเรียกใช้ไคลเอนต์ Dropbox ได้


1

สามารถทำได้ด้วย ol ดี 'cp แม้ว่าจะมีรูปแบบที่แตกต่างกันเล็กน้อยกว่าที่ระบุไว้ข้างต้น นี่คือวิธีที่ฉันทำ:

cp -ru --target-directory="destination_path" source_path/*

1

คุณสามารถแตกต่าง 2 ไดเรกทอรี

diff -r dir1 dir2

มันจะแสดงรายการของไฟล์ที่แตกต่างกัน

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