การคัดลอกไฟล์ในเทอร์มินัล
การคัดลอกเนื้อหาของไดเร็กทอรีหนึ่งไปยังไดเร็กทอรีอื่นเป็นงานที่ง่ายมาก อย่างไรก็ตาม คุณมีตัวเลือกมากมายในการทำ ลินุกซ์มีเครื่องมือมากมายในการจัดการไฟล์และไดเร็กทอรีผ่านการกระทำต่างๆ
ขั้นตอนทั้งหมดแสดงบน Ubuntu 18.04.1 ขั้นแรก มาสร้างไฟล์จำลองจำนวนหนึ่งเพื่อใช้งานกัน
$mkdir -vdir_A
ตอนนี้ มาสร้างไฟล์จำลองโดยใช้การสัมผัสกัน
$สัมผัสหุ่นจำลอง{1..10}
มาสร้างโฟลเดอร์อื่นภายใน dir_A ด้วยไฟล์จำลองจำนวนหนึ่ง
$mkdir -vdir_B
$สัมผัสหุ่นจำลอง{1..10}
ตอนนี้ โครงสร้างทั้งหมดของไดเร็กทอรี dir_A มีลักษณะดังนี้
$ต้นไม้dir_A
คำสั่งซีพี
NS cp คำสั่งเป็นเครื่องมือที่ใช้กันทั่วไปในการคัดลอกไฟล์ เป็นเครื่องมือที่มาพร้อมกับระบบ Linux โดยค่าเริ่มต้น การคัดลอกไฟล์และไดเร็กทอรีเป็นจุดประสงค์เดียวของ cp รองรับคุณสมบัติที่หลากหลาย
นี่คือโครงสร้างพื้นฐานของ cp สั่งการ.
$cp <ตัวเลือก> <แหล่งที่มา> <ปลายทาง>ตัวอย่างเช่น มาทำสำเนา dummy1 ไฟล์ที่มีชื่อ dummy1_copy .
$cpdummy1 dummy1_copy
ตอนนี้ มาลองคัดลอกหลายไฟล์พร้อมกัน สำหรับการดำเนินการดังกล่าว cp ต้องการให้ปลายทางเป็นไดเร็กทอรี ในที่นี้ ฉันจะใช้นิพจน์ไวด์การ์ดเพื่อดึง . ทั้งหมด หุ่นจำลอง ไฟล์และใส่ลงใน ~/ดาวน์โหลด ไดเรกทอรี
$cpหุ่นจำลอง*~/ดาวน์โหลด
วิธีการคัดลอกไดเร็กทอรี?
$cp -vrdir_A dir_A_copy
ในที่นี้ เราใช้แฟล็กที่แตกต่างกันสองแบบ มาดูรายละเอียดกันอย่างรวดเร็ว
- -r: ย่อมาจาก a เรียกซ้ำ คัดลอก (รวมถึงไฟล์ที่ซ่อนอยู่) แฟล็กที่ต้องมี หากการคัดลอกเกี่ยวข้องกับไดเร็กทอรีทั้งหมดหรือมากกว่า
- -v: ย่อมาจาก ละเอียด . เครื่องมือ cp จะส่งออกทุกการกระทำที่ทำ
ต้องการติดตามลิงก์สัญลักษณ์หรือไม่? เพิ่มแฟล็ก -L
$cp -Lvr <แหล่งที่มา> <ปลายทาง>สมมติว่าไดเร็กทอรีปลายทางมีไฟล์ชื่อเดียวกันอยู่แล้ว หากคุณต้องการหลีกเลี่ยงการเขียนทับ ให้ใช้แฟล็ก -n จะทำให้แน่ใจว่าในกรณีที่เกิดข้อขัดแย้ง cp จะไม่เขียนทับไฟล์
$cp -nv <แหล่งที่มา> <ปลายทาง>หากคุณกำลังดำเนินการคัดลอก/วางที่ละเอียดอ่อน คุณควรควบคุมสิ่งที่เกิดขึ้นได้ดีที่สุดใช่ไหม ในกรณีเช่นนี้ ให้ใช้แฟล็ก -i ย่อมาจากโหมดโต้ตอบที่ cp จะขอการยืนยันทุกครั้งที่เกิดข้อขัดแย้ง
$cp -ผม <แหล่งที่มา> <ปลายทาง>
หากคุณสนใจมากขึ้น หน้าคู่มือคือหนึ่งในเอกสารที่ดีที่สุดเสมอ เรียนรู้เพิ่มเติมเกี่ยวกับ cp
$ชาย cp
mv คำสั่ง
เครื่องมือ mv นั้นคล้ายกับเครื่องมือ cp อย่างไรก็ตาม แทนที่จะคัดลอก mv จะย้ายไฟล์และไดเร็กทอรี เมื่อเทียบกับ cp มันง่ายกว่า
โครงสร้างคำสั่งของ mv คล้ายกับ cp
$mv <ตัวเลือก> <แหล่งที่มา> <ปลายทาง>เพื่อย้ายเนื้อหาของ dir_A ถึง dir_A_copy ให้รันคำสั่งต่อไปนี้
$mv -vdir_A/dir_A_copy
ในที่นี้ แฟล็ก -v มีไว้สำหรับ ละเอียด โหมด. หากคุณต้องการย้ายเฉพาะเนื้อหาของ dir_A ให้ใช้อันต่อไปนี้แทน ในกรณีนี้ ไดเร็กทอรีเป้าหมายต้องมีอยู่ก่อน
$mv -vdir_A/ *dir_A_copy
เครื่องมือ mv ไม่มีอะไรให้ใช้งานมากนัก สำหรับตัวเลือกที่มีอยู่ทั้งหมด ให้ตรวจสอบหน้าคน
$ชาย mv
คำสั่ง Rsync
นี่เป็นหนึ่งในเครื่องมือที่ได้รับความนิยมและทรงพลังที่สุดสำหรับการคัดลอกไฟล์ ซึ่งส่วนใหญ่ใช้สำหรับการสำรองข้อมูล มีความสามารถในการคัดลอกไฟล์ผ่านการเชื่อมต่อระยะไกล ต่างจาก cp และ mv ตรงที่มันยังมาพร้อมกับตัวเลือกการคัดลอกไฟล์ขั้นสูงมากมายที่ให้การปรับแต่งพฤติกรรมได้อย่างเต็มที่
Rsync ส่วนใหญ่มีชื่อเสียงในด้านอัลกอริธึมการถ่ายโอนเดลต้าซึ่งช่วยลดปริมาณข้อมูลที่จำเป็นต้องแลกเปลี่ยนอย่างมาก ในกรณีของการซิงค์ระยะไกล จะช่วยประหยัดแบนด์วิธได้มาก
Rsync ไม่ได้ติดตั้งมาล่วงหน้าใน Linux distro ใด ๆ อย่างไรก็ตาม เนื่องจากความนิยมของมัน จึงทำให้ตอนนี้มีให้ใช้งานบน Linux distros หลักๆ ทั้งหมดแล้ว ใช้ Pkgs.org เพื่อค้นหาแพ็คเกจ rsync สำหรับ distro ของคุณ สมมติว่าคุณติดตั้ง rsync แล้ว มาเริ่มกันเลย
ขั้นแรก โครงสร้างคำสั่งพื้นฐานของ rsync มันค่อนข้างคล้ายกับ cp
$rsync<ตัวเลือก> <แหล่งที่มา> <ปลายทาง>ก่อนเริ่มต้น ต่อไปนี้คืออาร์กิวเมนต์ rsync ยอดนิยมจำนวนหนึ่ง
- -v : โหมด Verbose แสดงผลการกระทำใด ๆ ที่ดำเนินการบนหน้าจอคอนโซล
- -vv : โหมดละเอียดพร้อมรายละเอียดเพิ่มเติม
- -NS : โหมด Recursive ต้องมีอยู่หากคัดลอกไดเร็กทอรี
- -กับ : บีบอัดข้อมูล
- -ถึง : เก็บข้อมูล
- -NS : การวิ่งแบบแห้งควรรันร่วมกับโหมด verbose เพียงส่งออกการกระทำหากคำสั่งทำงานจริง
- -ลบ : ลบไฟล์และไดเร็กทอรีในไดเร็กทอรีปลายทางหากไดเร็กทอรีต้นทางไม่มีอีกต่อไป
- -no-whole-file : บังคับให้ rsync ใช้อัลกอริธึมการส่งเดลต้า ไม่ว่าจะเกิดอะไรขึ้น มีประโยชน์ในสถานการณ์ที่คุณต้องแน่ใจว่าเขียนข้อมูลจำนวนน้อยที่สุด
- –remove-source-file : ลบไฟล์ต้นฉบับหลังจากคัดลอก
ลองตรวจสอบพวกเขาในการดำเนินการ ขั้นแรกให้คัดลอกไดเร็กทอรี เรียกใช้คำสั่งต่อไปนี้
$rsync-vrdir_A/dir_A_copy
สำหรับเอาต์พุตโดยละเอียดเพิ่มเติม ให้ใช้แฟล็ก -vv
$rsync-vv -NSdir_A/dir_A_copy
ตอนนี้ มาดูส่วนเจ๋ง ๆ ของ rsync กัน เราได้พูดคุยกันถึงวิธีที่ rsync คัดลอกเฉพาะไฟล์ที่ได้รับการแก้ไขอย่างชาญฉลาด ช่วยประหยัดแบนด์วิดท์และการเขียนดิสก์ ได้เวลาตรวจสอบการใช้งานจริงแล้ว ในตัวอย่างนี้ การดำเนินการจะดำเนินการภายใน dir_A ไดเรกทอรี
$rsync-vv --no-whole-fileหุ่นจำลอง*dir_B/
แม้จะเปิดใช้งานการส่งเดลต้า แต่ rsync อาจใช้ไม่ได้เมื่อคุณทำการถ่ายโอนข้อมูลในเครื่อง
ตอนนี้ มาดูคุณสมบัติการวิ่งแบบแห้งกัน ก่อนที่จะรันคำสั่ง rsync จริง ๆ สิ่งสำคัญคือคุณต้องทดสอบก่อน นี่คือที่มาของการทำงานแบบแห้ง Rsync จะแสดงผลสิ่งที่จะเกิดขึ้นหากคำสั่งทำงานจริง
$rsync-anvrdir_A/dir_A_copy
Rsync ยังสามารถทำงานกับไดเร็กทอรีระยะไกลได้โดยไม่มีปัญหา สิ่งที่ต้องมีคือการเชื่อมต่อ SSH ที่เหมาะสมกับคีย์ SSH ที่กำหนดค่าไว้
$ rsync<ตัวเลือก> <local_dir><ชื่อผู้ใช้> @<remote_host>:<ปลายทาง_dir>
ต้องการดำเนินการย้ายหรือไม่ ในการวางสิ่งนั้นในมุมมองของ rsync rsync จะคัดลอกเนื้อหาของไดเร็กทอรีต้นทางแล้วลบเนื้อหาต้นฉบับ
$rsync-v --remove-source-files <แหล่งที่มา> <ปลายทาง>
ตรวจสอบผลการดำเนินการ
$ต้นไม้dir_A$ต้นไม้dir_A_copy
ความคิดสุดท้าย
cp และ rsync เป็นเครื่องมือทั่วไปที่คุณสามารถใช้ในการคัดลอกไฟล์ในโฟลเดอร์บนเทอร์มินัล Linux ทั้งคู่นั้นดีมากสำหรับการเขียนสคริปต์ เพียงตรวจสอบให้แน่ใจว่าได้ทดสอบฟังก์ชันต่างๆ ก่อนใช้งาน
สนุก!