เมื่อฉันใช้
cp -R inputFolder outputFolder
ผลลัพธ์ขึ้นอยู่กับบริบท :
- ถ้าไม่อยู่ก็จะถูกสร้างขึ้นและเส้นทางโฟลเดอร์โคลนจะเป็น
outputFolderoutputFolder - หาก
outputFolderมีอยู่โคลนจะถูกสร้างขึ้นoutputFolder/inputFolder
นี้เป็นที่น่ากลัวเพราะผมต้องการที่จะสร้างสคริปต์การติดตั้งบางส่วนและหากผู้ใช้วิ่งมันสองครั้งโดยไม่ได้ตั้งใจเขาจะได้สร้างขึ้นเป็นครั้งแรกแล้วในการทำงานที่สองทุกสิ่งที่จะถูกสร้างขึ้นอีกครั้งในoutputFolderoutputFolder/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ย้ายคอลเลกชันของไฟล์ไปเป็นไฟล์เดียวได้อย่างไร