วิธีการแทนที่เนื้อหาทั้งหมดจากโฟลเดอร์หนึ่งด้วยอีกโฟลเดอร์หนึ่ง


23

ฉันมีโฟลเดอร์และoldnew

ฉันต้องการที่จะแทนที่เนื้อหาทั้งหมดในการold/* new/*อาจมีหลายไดเรกทอรีย่อยในโฟลเดอร์เหล่านั้น

แต่อาจมีไฟล์บางไฟล์ที่ไม่ได้อยู่ในnew/*แต่อยู่ในold/*ดังนั้นฉันต้องการให้พวกเขาอยู่ตามที่

ฉันจะทำสิ่งนั้นจากเปลือก Linux ได้อย่างไร

คำตอบ:


18

rsync อาจเป็นตัวเลือกที่ดีกว่าที่นี่ มันง่ายเหมือน rsync -a subdir / ./ ตรวจสอบคำตอบ unix.stackexchageนี้เพื่อหาวิธีแก้ปัญหาที่ดีกว่า

ใช้ -fกับcpคำสั่ง

cp -fR /source/files /dest

ระงับ cp เพื่อเขียนทับ "prompt ..

หากต้องการแทนที่นามแฝงของ cp คุณสามารถใส่มันเข้าไปในเครื่องหมายคำพูด:

 'cp' -rf ./source/* /destination/

สำหรับข้อมูลเพิ่มเติมตามลิงค์เหล่านี้:

http://www.wallpaperama.com/forums/cp-command-problems-forcing-overwrite-using-cp-command-t5685.html

http://bytes.com/topic/unix/answers/865372-force-cp-overwrite-existing-directory


23

rsyncใช้ มันจะประสานไดเรกทอรีในทิศทางเดียว ดังนั้นหากคุณต้องการอัปเดตoldโฟลเดอร์ด้วยทุกสิ่งจากnewแต่เก็บสิ่งที่อยู่ในนั้นเพียงใช้:

rsync -avh --dry-run /path/to/new/ /path/to/old/

ในตัวอย่างแรกจะแสดงรายการของไฟล์ที่จะถูกถ่ายโอน ในกรณีนั้น: ทุกสิ่งที่พบnewจะถูกคัดลอกไปยังoldเว้นแต่จะมีอยู่แล้ว ทุกอย่างในการoldเข้าพักตามที่มันเป็น

หากมันดูดีสำหรับคุณให้ลบ--dry-runอาร์กิวเมนต์เพื่อส่งให้เป็นจริง

-avhธงเพียงแค่เปิดใช้งานโหมดเก็บ (ซึ่งจะรักษา timestamps ฯลฯ ) ฟุ่มเฟื่อยและมนุษย์สามารถอ่านไฟล์ขนาด จะไม่มีการลบอะไรจากปลายทางเว้นแต่คุณจะระบุการ--deleteตั้งค่าสถานะ ปรึกษาman rsyncข้อมูลเพิ่มเติม

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