ฉันต้องการคัดลอกไฟล์ที่แก้ไขในที่เก็บ svn ไปยังไดเรกทอรีอื่นในขณะที่ยังคงโครงสร้างไดเรกทอรีของพวกเขา
หลังจากอ่าน manpage awk และ xargs ฉันพบวิธีเปลี่ยนชื่อไฟล์ดังนี้:
$ svn status -q | awk '{ print $2 }' | xargs -d \\n -I '{}' cp '{}' /tmp/xen/
แต่ปัญหาคือว่าด้วยวิธีนี้โครงสร้างไดเรกทอรีจะไม่ถูกเก็บรักษาไว้ฉันต้องการคัดลอกไฟล์ดังนี้:
./common/superp.c -> /tmp/xen/common/superp.c
./common/m2mgr.c -> /tmp/xen/common/m2mgr.c
./common/page_alloc.c -> /tmp/xen/common/page_alloc.c
./arch/x86/mm.c -> /tmp/xen/arch/x86/mm.c
./arch/x86/mm/shadow/private.h -> /tmp/xen/arch/x86/mm/shadow/private.h
ฉันพยายามเปลี่ยนคำสั่งcp เป็น cp '{}' / tmp / xen / '{}'แต่มันบอกว่าไม่มีไฟล์หรือไดเรคทอรีดังกล่าว มีวิธีการทำสำเนาไฟล์ cp และสร้างไดเรกทอรีถ้าจำเป็นหรือไม่ และโปรดชี้ให้เห็นว่าห่วงโซ่คำสั่งนี้สามารถลดความซับซ้อนได้หรือไม่ :-)
ขอบคุณสำหรับคำตอบทั้งหมดของคุณ เนื่องจากไดเรกทอรีมีขนาดใหญ่ฉันไม่ต้องการคัดลอกทั้งไดเรกทอรีโดยใช้ cp -R หรือ rsync คำแนะนำของ CK ในการใช้ท่อน้ำมันดินค่อนข้างมีประโยชน์
svn status -q | awk '{ print $2 }' | xargs tar cf - | (cd /tmp/xen/; tar xvf -)