เริ่มต้นจากคำตอบของ @Joseph R. นี่เป็นวิธีแก้ปัญหาของฉันที่จะทำให้มันทำงานกับการค้นหาได้เนื่องจากฉันไม่สามารถใช้คำสั่งของเขาได้ (ฉันไม่คิดว่าจะเป็นเพราะกฎที่ใช้กับ\+
: ไม่มีอะไรหลังจาก{}
องค์ประกอบ) (ฉันไม่สามารถแสดงความคิดเห็นย่อหน้าทั้งหมดนี้สามารถลบออกได้)
หากต้องการคัดลอกไฟล์ทั้งหมดลงในไดเรกทอรีเดียวกันที่แน่นอน (ที่นี่target/directory
):
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D
ไม่ได้บังคับที่นี่มันจะสร้างไดเรกทอรีที่ไม่มีอยู่ให้เป้าหมาย
หากต้องการคัดลอกลำดับชั้นของไดเรกทอรีทั้งหมดและไฟล์ (ซึ่งจะไม่ใช้ไดเรกทอรีที่ว่างเปล่า) โดยเริ่มจากตำแหน่งที่คุณอยู่ในปัจจุบัน:
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
ดังที่กล่าวมาสิ่งนี้จะสร้างต้นไม้ขึ้นมา$PWD
ใหม่ นอกจากนี้ถ้าคุณต้องการคัดลอกไดเรกทอรีที่ว่างเปล่าบนสามารถหาวิธีการใช้ที่-type d
ของและfind
install -d
ดังนั้นในการคัดลอกทรีโดยเริ่มจากไดเร็กตอรี่ที่ไม่ใช่$PWD
:
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
สังเกตว่าparent/directory
จะไม่คัดลอกไป
พิเศษ
สำหรับผู้ที่ใช้shell/fish
นี่คือบรรทัดที่ไม่เหมือนกัน:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'