Unix: วิธีผสานสองไดเรกทอรี


17

ว่าฉันมีสองโฟลเดอร์ที่มีเนื้อหาต่างๆและfoo barฉันจะรวมbarเข้าด้วยfooกันอย่างไร:

  • ไฟล์ในfooที่ไม่ได้อยู่ในbarนั้นจะไม่ถูกแตะต้อง
  • ไฟล์ในbarที่ไม่ได้อยู่ในfooขณะนี้fooมา
  • ไฟล์ในfooที่ยังอยู่ในได้ถูกแทนที่ด้วยไฟล์จากbarbar

คำตอบ:


25

ถ้าฉันอ่านความต้องการของคุณได้อย่างถูกต้องมีไฟล์ไม่มีที่ไปจากการfoo barดูเหมือนว่าคุณสามารถคัดลอกเนื้อหาของbarไปที่เพื่อfooให้สามารถเขียนทับไฟล์ได้ตามต้องการ (พฤติกรรมเริ่มต้น)

$ cp -R /path/to/bar/* /path/to/foo

ใช่สิ่งที่ฉันไม่แน่ใจคือความซ้ำซากและวิธีที่จะไม่จบลงด้วยการมีบาร์อยู่ข้างในฟูเหมือนฟู / บาร์ แต่ตอนนี้ดูเหมือนว่าจะเป็นสิ่งที่ฉันต้องการ :)
Svish

1
ขวาถ้าคุณก็ไม่ได้cp -R /path/to/bar /path/to/fooมันจะสร้างไดเรกทอรีภายในbar fooจุดที่ลึกซึ้ง
ร่วมประชุม

1
หมายเหตุ: มันจะละเว้นไฟล์ / ไดเรกทอรีที่ซ่อนอยู่ในbar(เช่นชื่อที่ขึ้นต้นด้วยจุด - .) เนื่องจากการทำงานของเชลล์กลม
Kamil Maciorowski

9

ผมมีความต้องการที่คล้ายกันมาก: ผสานbarเข้าfooแต่ไฟล์ที่อยู่ในbar ไม่ควรfooไฟล์ที่ตรงกันในการเขียนทับ ในกรณีนี้:

$ cp -R -n /path/to/bar/* /path/to/foo/

1

ลองสิ่งนี้:

$ cp -r-u-v /path/to/foo/* /path/to/bar/

จากman cp
-u, - อัปเดตการ คัดลอกเฉพาะเมื่อไฟล์ SOURCE ใหม่กว่าไฟล์ปลายทางหรือเมื่อไฟล์ปลายทางหายไป
-R, -r, -ไดเรกทอรีคัดลอกแบบเรียกซ้ำ


1
มีคนสองคนแนะนำคำสั่ง cp แล้วและคำตอบของคุณดูเหมือนไม่จำเป็น สละเวลาสักครู่เพื่ออธิบายว่าข้อโต้แย้งที่คุณเลือกทำได้ดีกว่าคำแนะนำอื่น ๆ จะช่วยให้คำตอบของคุณมีประโยชน์มากขึ้น
music2myear

1
แฟล็ก -u อัพเดตต่อเมื่อไฟล์ในซอร์สนั้นใหม่กว่าซึ่งเป็นหนึ่งในปลายทาง โปรดดู: man cp -> -u, - อัปเดต: คัดลอกเฉพาะเมื่อไฟล์ SOURCE ใหม่กว่าไฟล์ปลายทางหรือเมื่อไฟล์ปลายทางหายไป
drew7721

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