ฉันจะคัดลอกโครงสร้างไดเรกทอรี dir1, ไปยัง dir2, (พร้อมไดเรกทอรีย่อยทั้งหมด) บน Unix โดยใช้หน้าต่างเทอร์มินัลได้อย่างไร?
ฉันจะคัดลอกโครงสร้างไดเรกทอรี dir1, ไปยัง dir2, (พร้อมไดเรกทอรีย่อยทั้งหมด) บน Unix โดยใช้หน้าต่างเทอร์มินัลได้อย่างไร?
คำตอบ:
cp -rf /source/path/ /destination/path/
-r
= เรียกซ้ำคัดลอกไดเรกทอรีย่อยทั้งหมด
-f
= force หากไฟล์ปลายทางที่มีอยู่ไม่สามารถเปิดได้ให้ลบออกแล้วลองอีกครั้ง
หมายเหตุคุณควรระวังเมื่อใช้การ-f
ตั้งค่าสถานะเนื่องจากจะเขียนทับสิ่งที่คุณคัดลอกไป ขอบคุณ @Nifle สำหรับคำแนะนำนี้
คุณอาจต้องการใช้ * wildcard เพื่อคัดลอกไฟล์ทั้งหมดในไดเรกทอรีถ้าคุณต้องการ
f
ธง -f if an existing destination file cannot be opened, remove it and try again
-f
ตั้งค่าสถานะว่ามีประโยชน์หากคุณกำลังคัดลอก <source> มากกว่า <dest> (เช่นเดียวกับการเขียนทับสิ่งต่าง ๆ ใน <dest>) ฉันจะถอนมันออกเองและลบคำตอบของฉัน)
ในขณะที่cp -R
คำตอบนั้นถูกต้อง (BTW กรณีของการตั้งค่าสถานะบน BSD ต้องเป็นทุนทั้งสองได้รับการสนับสนุนบน linux) มีคาถาเก่าที่เกี่ยวข้องกับน้ำมันดิน :
$ tar cf - . | (cd DIR; tar xf - )
ทำไมห่าคุณจะทำอย่างนั้น? เพราะน้ำมันดินมีความเข้าใจที่ค่อนข้างซับซ้อนของลิงก์ทั้งแบบแข็งและเป็นสัญลักษณ์
คุณต้องการคัดลอกเพื่อแทนที่ลิงค์สัญลักษณ์ที่มีอยู่ด้วยลิงค์ที่มีข้อความเหมือนกันหรือไม่? หรือมีลิงก์ไปยังเป้าหมายเดียวกัน (ปรับเส้นทางที่สัมพันธ์กันเพื่อชดเชย) หรือกับสำเนาเป้าหมายของ bitwise?
หากไฟล์สองไฟล์ในต้นฉบับเชื่อมโยงกันอย่างหนักโครงสร้างใหม่ควรมีข้อมูลสองชุดหรือเพียงไฟล์เดียว?
การตัดสินใจการตัดสินใจ น้ำมันดินมีค่าเริ่มต้นที่สมเหตุสมผล แต่ช่วยให้คุณมีความเฉพาะเจาะจงมาก
ฉันชอบ
cp -axv source dest
Rsync เป็นอีกหนึ่งเครื่องมือที่ดีสำหรับเรื่องนี้
rsync -va source dest