วิธีการคัดลอกไฟล์ไปยังหลายไดเรกทอรีด้วยหนึ่งคำสั่งใน 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 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งใด ๆ.