ฉันจะคัดลอกไฟล์ในโฟลเดอร์ไปยังโฟลเดอร์อื่นบน Linux Terminal ได้อย่างไร

How Can I Copy Files Folder Into Another Folder Linux Terminal



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

การคัดลอกไฟล์ในเทอร์มินัล

การคัดลอกเนื้อหาของไดเร็กทอรีหนึ่งไปยังไดเร็กทอรีอื่นเป็นงานที่ง่ายมาก อย่างไรก็ตาม คุณมีตัวเลือกมากมายในการทำ ลินุกซ์มีเครื่องมือมากมายในการจัดการไฟล์และไดเร็กทอรีผ่านการกระทำต่างๆ







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

สนุก!