โฮมเพจ » ทำอย่างไร » วิธีการคัดลอกไฟล์ไปยังหลายไดเรกทอรีด้วยหนึ่งคำสั่งใน Linux

    วิธีการคัดลอกไฟล์ไปยังหลายไดเรกทอรีด้วยหนึ่งคำสั่งใน Linux

    การคัดลอกไฟล์ด้วยบรรทัดคำสั่ง Linux นั้นง่าย อย่างไรก็ตามจะเกิดอะไรขึ้นถ้าคุณต้องการคัดลอกไฟล์เดียวกันไปยังหลาย ๆ ตำแหน่ง? นั่นก็ง่ายเช่นกันและเราจะแสดงวิธีทำด้วยคำสั่งเดียว.

    โดยปกติในการคัดลอกหนึ่งไฟล์คุณจะต้องใช้ ซีพี คำสั่งเชื่อมโยงไปยังไฟล์ต้นฉบับและไดเรกทอรีปลายทาง:

    cp ~ / Documents / FileToBeCopied.txt ~ / TextFiles /

    หากต้องการคัดลอกไปยังอีกสองไดเรกทอรีหลาย ๆ คนจะเรียกใช้คำสั่งอีกสองครั้งโดยมีปลายทางต่างกัน:

    cp ~ / Documents / FileToBeCopied.txt ~ / Dropbox /
    cp ~ / Documents / FileToBeCopied.txt / media / lori / MYUSBDRIVE /

    อย่างไรก็ตามเราสามารถทำงานเดียวกันด้วยคำสั่งเดียว:

    echo dir1 dir2 dir3 | xargs -n 1 cp file1

    นี่คือวิธีการทำงานของคำสั่งนี้ เสียงสะท้อน คำสั่งปกติเขียนไปยังหน้าจอ อย่างไรก็ตามในกรณีนี้เราต้องการให้ฟีดผลลัพธ์ของ เสียงสะท้อน คำสั่งเป็นอินพุตไปยัง xargs คำสั่ง ในการทำสิ่งนี้เราใช้สัญลักษณ์ไพพ์ ( | ) ซึ่งฟีดเอาต์พุตจากคำสั่งหนึ่งเป็นอินพุตไปยังอีก xargs คำสั่งจะเรียกใช้ ซีพี คำสั่งสามครั้งแต่ละครั้งต่อท้ายพา ธ ไดเร็กทอรีถัดไปที่ไพพ์จาก เสียงสะท้อน คำสั่งไปยังจุดสิ้นสุดของ ซีพี คำสั่ง มีสามข้อโต้แย้งที่ถูกส่งผ่านไปยัง xargs , แต่ -ไม่มี 1 ตัวเลือกใน xargs คำสั่งบอกให้ผนวกหนึ่งในอาร์กิวเมนต์เหล่านี้พร้อมกันกับ ซีพี สั่งทุกครั้งที่มันทำงาน.

    ดังนั้นเพื่อยึดตัวอย่างของเราจากก่อนหน้านี้ทั้งสามแยก ซีพี คำสั่งด้านบนสามารถรวมกันเป็นคำสั่งเดียวเช่นนี้:

    echo ~ / TextFiles / ~ / Dropbox / media / lori / MYUSBDRIVE | xargs -n 1 cp ~ / Documents / FileToBeCopied.txt

    โปรดทราบว่าหากไฟล์ที่ถูกคัดลอกนั้นมีอยู่ในไดเรกทอรีปลายทางที่ระบุไฟล์ในปลายทางนั้นจะถูกแทนที่โดยอัตโนมัติ คุณจะไม่ถูกถามว่าคุณต้องการแทนที่ไฟล์หรือไม่ (โดยปกติเมื่อคุณใช้ ซีพี คำสั่งเพื่อคัดลอกไฟล์ไปยังตำแหน่งเดียวคุณสามารถเพิ่ม -ผม ตัวเลือกที่จะถามว่าคุณต้องการแทนที่ไฟล์ที่มีอยู่ อย่างไรก็ตาม -ผม ตัวเลือกเป็นตัวเลือกแบบโต้ตอบ (มันทำให้ ซีพี คำสั่งเพื่อขอข้อมูลจากผู้ใช้) และคุณไม่สามารถใช้ตัวเลือกแบบโต้ตอบกับ ซีพี คำสั่งเมื่อใช้มันร่วมกับ xargs .)

    สิ่งอื่นที่ควรพิจารณาคือถ้าคุณกำลังคัดลอกไฟล์ที่มีขนาดใหญ่มากคุณอาจต้องการเพิ่ม no-clobber ( -n ) ตัวเลือกไปที่ ซีพี คำสั่งในคำสั่งเดียวข้างต้น ตัวเลือกนี้จะป้องกันไม่ให้ไฟล์ถูกเขียนทับในปลายทางโดยอัตโนมัติหากมีอยู่แล้ว หากคุณกำลังคัดลอกไฟล์ที่มีขนาดใหญ่มากผ่านเครือข่ายมันอาจจะช้าและคุณอาจต้องการหลีกเลี่ยงการใช้ทรัพยากรที่จำเป็นในการคัดลอกและแทนที่ไฟล์ คำสั่งต่อไปนี้จะเพิ่ม -n ตัวเลือกและจะไม่คัดลอกไฟล์ไปยังปลายทางใด ๆ ที่ระบุไว้ในอาร์กิวเมนต์ไปยังคำสั่ง echo หากไฟล์นั้นมีอยู่แล้วในปลายทาง.

    echo ~ / TextFiles / ~ / Dropbox / media / lori / MYUSBDRIVE | xargs -n 1 cp -n ~ / Documents / FileToBeCopied.txt

    พิมพ์ man echo, man xargs หรือ man cp บนบรรทัดคำสั่งใน Linux สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งใด ๆ.