เมื่อฉันใช้
cp -R inputFolder outputFolder
ผลลัพธ์ขึ้นอยู่กับบริบท :
- ถ้าไม่อยู่ก็จะถูกสร้างขึ้นและเส้นทางโฟลเดอร์โคลนจะเป็น
outputFolder
outputFolder
- หาก
outputFolder
มีอยู่โคลนจะถูกสร้างขึ้นoutputFolder/inputFolder
นี้เป็นที่น่ากลัวเพราะผมต้องการที่จะสร้างสคริปต์การติดตั้งบางส่วนและหากผู้ใช้วิ่งมันสองครั้งโดยไม่ได้ตั้งใจเขาจะได้สร้างขึ้นเป็นครั้งแรกแล้วในการทำงานที่สองทุกสิ่งที่จะถูกสร้างขึ้นอีกครั้งในoutputFolder
outputFolder/inputFolder
- ฉันต้องการพฤติกรรมแรกเสมอ: สร้างโคลนถัดจากต้นฉบับ (เป็นพี่น้อง)
- ฉันต้องการใช้
cp
แบบพกพา (เช่น MINGW ไม่มีการrsync
จัดส่ง) - ฉันตรวจสอบ
cp -R --parents
แต่สิ่งนี้จะสร้างเส้นทางใหม่ตลอดเส้นทางไดเรกทอรีต้นไม้ (ดังนั้นโคลนจะไม่เป็นoutputFolder
แต่some/path/outputFolder
) --remove-destination
หรือ--update
ในกรณีที่ 2 ไม่เปลี่ยนแปลงสิ่งใดสิ่งต่าง ๆ ก็ยังคงถูกคัดลอกไปoutputFolder/inputFolder
มีวิธีการทำเช่นนี้โดยไม่ตรวจสอบการมีอยู่ของoutputFolder
(หากโฟลเดอร์ไม่มีอยู่แล้ว ... ) หรือใช้งานrm -rf outputFolder
หรือไม่?
วิธีการทำ UNIX แบบพกพาที่ตกลงกันคืออะไร
rsync
ล่ะ?
cp
ไพพ์ระหว่างสองtar
คำสั่งเป็นวิธีที่น่าเชื่อถือในการคัดลอกทรี
rsync
จัดส่ง
tar -C input -cf - . | tar -C output -xf -
ทำงานได้ -C
เปลี่ยนไดเร็กตอรี่ที่ใช้งานได้, แต่มันไม่ใช่ตัวเลือกมาตรฐาน, ดังนั้นหากมันไม่รองรับคุณต้องรันสอง tars ในได( cd input && tar -cf - . ) | ( cd output && tar -xf - )
เร็กตอรี่ที่ใช้งานได้เริ่มต้นเช่น, อย่างไรก็ตามถ้าคุณจัดการกับวินโดวส์
mv
ย้ายคอลเลกชันของไฟล์ไปเป็นไฟล์เดียวได้อย่างไร