คำสั่งคัดลอก Ubuntu วิธีคัดลอกไฟล์โดยใช้คำสั่ง cp ใน Linux ค้นหาอักขระคำสั่งและอักขระตัวแทนสำหรับชื่อไฟล์

การคัดลอกไฟล์เป็นหนึ่งในงานที่ผู้ใช้เผชิญบ่อยที่สุด คอมพิวเตอร์ส่วนบุคคล- แน่นอนคุณสามารถเปิดตัวจัดการไฟล์ป้อนได้ โฟลเดอร์ที่ต้องการและคัดลอกไฟล์โดยใช้ เมนูบริบท- ไม่มีอะไรจะพูดถึง แต่ในบทความนี้ ฉันต้องการดูการคัดลอกไฟล์ใน Linux โดยใช้เทอร์มินัล

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

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

ไวยากรณ์และตัวเลือก

ไวยากรณ์ทั่วไป ซีพีดูเหมือนว่านี้:

$ cp options ไฟล์ต้นทางของไฟล์ปลายทาง

ไฟล์ต้นฉบับตัวเลือก $ cp ไดเรกทอรีปลายทาง/

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

ยูทิลิตี้นี้มีตัวเลือกที่น่าสนใจมากมายที่สามารถช่วยงานคัดลอกที่ไม่ได้มาตรฐานได้อย่างมาก ดังนั้นเรามาดูกันดีกว่า:

  • --แอตทริบิวต์เท่านั้น- อย่าคัดลอกเนื้อหาของไฟล์ แต่เฉพาะการตั้งค่าสถานะการเข้าถึงและเจ้าของเท่านั้น
  • -f, --บังคับ- เขียนใหม่ ไฟล์ที่มีอยู่;
  • -i, --แบบโต้ตอบ- ถามว่าจำเป็นต้องเขียนทับไฟล์ที่มีอยู่หรือไม่
  • -ล- คัดลอกไม่ใช่ลิงก์สัญลักษณ์ แต่เป็นลิงก์ที่ชี้ไป
  • -n- อย่าเขียนทับไฟล์ที่มีอยู่
  • -ป- อย่าติดตาม ลิงก์สัญลักษณ์;
  • -ร- คัดลอก โฟลเดอร์ลินุกซ์ซ้ำ;
  • -ส- อย่าคัดลอกไฟล์ใน Linux แต่สร้างลิงก์สัญลักษณ์
  • -คุณ- คัดลอกไฟล์เฉพาะเมื่อมีการเปลี่ยนแปลงเท่านั้น
  • -x- อย่าไปเกินขอบเขตของระบบไฟล์นี้
  • -พี- บันทึกเจ้าของ การประทับเวลา และแฟล็กการเข้าถึงเมื่อทำการคัดลอก
  • -ที- พิจารณาไฟล์ปลายทางเป็นไดเร็กทอรีและคัดลอกไฟล์ต้นฉบับไปยังไดเร็กทอรีนี้

ตัวอย่างการคัดลอกไฟล์ใน Linux

เมื่อคุณทราบตัวเลือกพื้นฐานแล้ว คุณก็สามารถฝึกฝนต่อไปได้ เช่น เราต้องการคัดลอกรูปภาพบางรูปจาก โฮมโฟลเดอร์ไปยังไดเรกทอรีย่อยของรูปภาพ:

ซีพี ~/pic.png ~/pictures/

หรือเราสามารถระบุชื่อของรูปภาพใหม่ได้อย่างชัดเจน:

ซีพี ~/pic.png ~/pictures/wallpaper.png

โฟลเดอร์จะถูกคัดลอกโดยใช้ปุ่ม -ร:

cp -R ~/โฟลเดอร์ ~/เอกสาร/

หลังจากรันคำสั่งคัดลอกนี้ ~/โฟลเดอร์จะถูกคัดลอกไปยังโฟลเดอร์ ~/Documents สิ่งสำคัญคืออย่าลืมใส่เครื่องหมายทับที่ส่วนท้ายของนิพจน์หรือใช้ตัวเลือก -ที- มิฉะนั้น ~/documents โฟลเดอร์จะถูกเขียนทับ

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

cp -i ~/test ~/Documents/test

นอกจากนี้ยังมีตัวเลือกตรงกันข้าม -nซึ่งหมายความว่า "ไม่ต้องเขียนทับไฟล์ที่มีอยู่"

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

cp -u ~/test ~/Documents/test

ซีพียังรองรับ อักขระพิเศษการทดแทน * และ ? - ตัวอย่างเช่น คำสั่งต่อไปนี้จะคัดลอกไฟล์ทั้งหมดที่ขึ้นต้นด้วย ทดสอบ:

cp ~/test* ~/Documents/

หากคุณต้องการใช้นิพจน์ทั่วไปที่ซับซ้อนมากขึ้น คุณจะต้องรวมยูทิลิตี้นี้เข้าด้วยกัน ซีพีกับ หาหรือ อีเกรป.

cp -p ~/test* ~/Documents/

เพื่อให้คำสั่งใช้งานง่ายขึ้น คุณสามารถใช้ไวยากรณ์ได้ วงเล็บปีกกา- ตัวอย่างเช่น หากต้องการสำรองไฟล์ ให้รัน:

$ cp test.conf(,.บัค)

ไฟล์ที่มีชื่อและนามสกุลเดียวกันจะถูกสร้างขึ้น.bak

ค่าเริ่มต้นใน ซีพีไม่แสดงออกมาซึ่งไม่สะดวกมากเมื่อใช้งานด้วย ไฟล์ขนาดใหญ่แต่คุณสามารถดูได้อย่างง่ายดายโดยใช้ยูทิลิตี้ ประวัติย่อ.

การคัดลอกไฟล์โดยใช้นิพจน์ทั่วไปใน Linux

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

หา . -ชื่อ -exec cp() ~/Documents\

จุดนี้แสดงถึงไดเร็กทอรีปัจจุบันและพารามิเตอร์ ชื่อระบุนิพจน์ทั่วไป พารามิเตอร์ ผู้บริหารเราระบุคำสั่งที่ควรดำเนินการกับไฟล์ที่ตรวจพบ เครื่องหมาย {} - แทนที่ชื่อของแต่ละไฟล์

แต่ไม่ใช่ หา“เราเป็นคนเดียวที่สามารถทำได้ สามารถรับได้เช่นเดียวกันโดยการขอรายการไฟล์ไดเร็กทอรีมาในนั้น” LSกรองโดย การแสดงออกปกติ อีเกรปและส่งชื่อไฟล์ไปทีละไฟล์ ซีพีโดยใช้ xargs:

ls -1 ~/ | egrep "" | xargs cp -t ~/โฟลเดอร์/

มันไม่ใช่จริงๆ วิธีที่สะดวกคัดลอกไฟล์ Linux แต่ก็ยังสามารถทำได้ ไฟล์ทั้งหมดจาก โฮมไดเร็กทอรีมีเพียงตัวอักษรภาษาอังกฤษในชื่อ

การคัดลอกเนื้อหาไฟล์ใน Linux

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

ไฟล์แมว 1 > ไฟล์ 2

หากไฟล์ไม่ว่างเปล่า ไฟล์นั้นจะถูกเขียนทับ หรือเราสามารถรวมสองไฟล์แยกกันเป็นไฟล์เดียว:

cat ไฟล์ 1 ไฟล์ 2 > ไฟล์ 3

การคัดลอกไฟล์พิเศษใน Linux โดยใช้ tar

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

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

tar cf - /var | (ซีดี /mnt/var && tar xvf -)

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

ข้อสรุป

ตอนนี้คุณรู้วิธีคัดลอกไฟล์ใน Ubuntu และ Linux โดยทั่วไปแล้ว อย่างที่คุณเห็น สิ่งนี้ทำได้เร็วและมีประสิทธิภาพมากกว่าในเทอร์มินัลมากกว่าการใช้ กุยถ้าคุณจำได้ คำสั่งที่จำเป็น- หากคุณมีคำถามใด ๆ ถามในความคิดเห็น!

cp - คัดลอกไฟล์และไดเร็กทอรี

ทบทวน

ซีพี [ ตัวเลือก] ไฟล์ เส้นทาง ซีพี [ ตัวเลือก] ไฟล์... แคตตาล็อกตัวเลือก POSIX: [-fiprR] [--] ตัวเลือกเพิ่มเติม POSIX 1003.1-2003: [-HLP]ตัวเลือก GNU file-utils 4.0 (แบบสั้น): [-abdfilprsuvxPR] [-ส คำต่อท้าย] [-วี (เลข, มีอยู่, ง่าย)] [--สำรอง=ควบคุม] [--เบาบาง=เมื่อไร] [--ช่วย] [--เวอร์ชัน] [--] เพิ่มเติม ตัวเลือกกนู file-utils 4.1 (แบบสั้น): [-HLP] [--คัดลอกเนื้อหา] [--ไม่เก็บรักษา] [--ตอบกลับ=ยังไง] [--ลบปลายทาง] [--strip-trailing-slashes] [--ไดเรกทอรีเป้าหมาย=ผบ]

คำอธิบาย

ซีพีคัดลอกไฟล์ (หรือหากถาม ไดเรกทอรี) คุณสามารถคัดลอกไฟล์หนึ่งไปยังอีกไฟล์หนึ่งได้ ไฟล์ที่กำหนดหรือคัดลอกไฟล์ได้มากเท่าที่คุณต้องการไปยังไดเร็กทอรีที่ระบุ ซีพีหากอาร์กิวเมนต์สุดท้ายเป็นไดเร็กทอรีที่มีอยู่แล้ว ไฟล์คัดลอกต้นฉบับแต่ละรายการ ซีพีไปยังไดเร็กทอรีนี้ (รักษาชื่อ) มิฉะนั้นหากได้รับเพียงสองไฟล์เท่านั้น คัดลอกไฟล์แรกไปยังไฟล์ที่สอง หากมีการระบุอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกมากกว่าสองรายการ และอาร์กิวเมนต์สุดท้ายไม่ใช่ชื่อของไดเร็กทอรีใดๆ จะส่งผลให้เกิดข้อผิดพลาด(ดังนั้นหาก /a~-- เป็นไดเร็กทอรี ดังนั้น cp -r /a /b จะคัดลอก /a ไปยัง /b/a และ /a/x ไปยัง /b/a/x ในกรณีที่ /b มีอยู่แล้ว แต่คำสั่งเดียวกันนี้จะคัดลอก /a ถึง /b และ /a/x ไปยัง /b/x หากไม่มี /b หรือจะล้มเหลวหาก /b เป็นไฟล์ปกติ) สิทธิ์การเข้าถึงไฟล์และไดเร็กทอรีจะเท่ากับสิทธิ์ในไฟล์ต้นฉบับคูณเชิงตรรกะ (AND) ด้วย 0777 (กล่าวอีกนัยหนึ่งบิตเหนียว setuid และ setgid จะถูกรีเซ็ตในสิทธิ์ใหม่ - Ed.) และยังรับ เข้าบัญชีอูมาสค์ ซีพี(1) ผู้ใช้ (เว้นแต่จะระบุตัวเลือก -p) (แต่ในระหว่างการคัดลอกไดเร็กทอรีแบบเรียกซ้ำ ไดเร็กทอรีที่สร้างขึ้นใหม่จะได้รับสิทธิ์ชั่วคราว ORed ด้วยค่า S_IRWXU (0700) เพื่อให้สามารถอ่าน เขียน และค้นหาไดเร็กทอรีที่สร้างขึ้นใหม่ได้)

หากคุณพยายามคัดลอกไฟล์ลงในตัวมันเอง จะไม่มีอะไรเกิดขึ้น (ยกเว้นข้อความแสดงข้อผิดพลาดที่อาจเกิดขึ้น) เมื่อไฟล์ถูกคัดลอกไปยังไฟล์อื่นที่มีอยู่ ไฟล์นั้นจะถูกเปิดโดยใช้การเรียก open(path, O_WRONLY | O_TRUNC) เมื่อทำการคัดลอกอีกครั้ง สร้างไฟล์

จากนั้นจะถูกสร้างขึ้นโดยใช้การเรียก open(path, O_WRONLY | O_CREAT, mode) หากการเรียกเหล่านี้ล้มเหลว ไฟล์นั้นจะถือว่ามีอยู่และถึง พยายามลบออก (ยกเลิกการเชื่อมโยง) คุณต้องระบุตัวเลือก -f หากการลบสำเร็จ ทุกอย่างก็จะทำงานเหมือนกับไฟล์ใหม่ตัวเลือก POSIX POSIX มีสี่ตัวเลือกครึ่ง: -ฉหากจำเป็น ให้ลบไฟล์ที่มีอยู่ซึ่งกำลังคัดลอกไป (ดูด้านบน) -พี-ฉัน ถามว่าไฟล์ที่มีอยู่ที่กำลังคัดลอกไปควรถูกเขียนทับหรือไม่ (คำขอถูกส่งไปยังเอาต์พุตข้อผิดพลาดมาตรฐาน และการตอบสนองจะถูกอ่านจากอินพุตมาตรฐาน - การคัดลอกจะดำเนินการเฉพาะในกรณีที่คำตอบเป็นค่าบวก)ไปที่ไฟล์. ในกรณีที่การตั้งค่าเจ้าของหรือกลุ่มส่งผลให้เกิดข้อผิดพลาด บิต suid และ sgid จะถูกล้าง (โปรดทราบว่าในภายหลังอาจมีไฟล์ต้นฉบับและสำเนาของมัน เวลาที่ต่างกันการเข้าถึงครั้งสุดท้าย เนื่องจากการดำเนินการคัดลอกคือการเข้าถึงไฟล์ต้นฉบับ) -รคัดลอกไดเร็กทอรีซ้ำ; จัดการสถานการณ์ที่พบวัตถุที่ไม่ใช่ไฟล์หรือไดเร็กทอรีธรรมดาได้อย่างถูกต้อง (ดังนั้น สำเนาของ FIFO หรือไฟล์พิเศษก็จะเป็น FIFO หรือไฟล์พิเศษด้วย) -รคัดลอกไดเร็กทอรีซ้ำ; ดำเนินการบางอย่างที่ไม่ได้กำหนดโดยมาตรฐานเมื่อพบวัตถุที่ไม่ใช่ไฟล์หรือไดเร็กทอรีธรรมดา (ดังนั้นจึงได้รับอนุญาต และในความเป็นจริงได้รับการอนุมัติแล้ว)-ตัวเลือก ซีพีเป็นคำพ้องสำหรับ -R -- อย่างไรก็ตามพฤติกรรมโง่ ๆ ที่เวอร์ชันแสดงออกมา

ไม่ถูกห้ามใน GNU 4.0) หากคุณพยายามคัดลอกไฟล์ลงในตัวมันเอง จะไม่มีอะไรเกิดขึ้น (ยกเว้นข้อความแสดงข้อผิดพลาดที่อาจเกิดขึ้น) เมื่อไฟล์ถูกคัดลอกไปยังไฟล์อื่นที่มีอยู่ ไฟล์นั้นจะถูกเปิดโดยใช้การเรียก open(path, O_WRONLY | O_TRUNC) เมื่อทำการคัดลอกอีกครั้ง สร้างไฟล์ 2003

เสร็จสิ้นรายการตัวเลือก เพิ่มเติมมาตรฐาน POSIX 1003.1-2003 เพิ่มสามตัวเลือกที่ระบุวิธีจัดการลิงก์สัญลักษณ์ เมื่อดำเนินการคัดลอกแบบไม่เรียกซ้ำ ลิงก์สัญลักษณ์จะถูกยกเลิกการอ้างอิง (ออบเจ็กต์ที่ลิงก์ชี้ไปจะถูกนำไปใช้แทนลิงก์นั้นเอง - ประมาณ) เมื่อดำเนินการคัดลอกแบบเรียกซ้ำโดยใช้ตัวเลือก -r ผลลัพธ์จะขึ้นอยู่กับการใช้งาน เมื่อดำเนินการคัดลอกแบบเรียกซ้ำโดยใช้ตัวเลือก -R: -ล-ชม -ปยกเลิกการอ้างอิงลิงก์สัญลักษณ์ที่ระบุในรายการพารามิเตอร์ ไม่ยกเลิกการอ้างอิงลิงก์สัญลักษณ์ที่พบระหว่างการคัดลอกแบบเรียกซ้ำ แต่เพียงคัดลอกลิงก์เหล่านั้น

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

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

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

ตามค่าเริ่มต้น ลิงก์สัญลักษณ์จะไม่ถูกยกเลิกการอ้างอิง -ก,--คลังเก็บเอกสารสำคัญ รักษาโครงสร้างและคุณลักษณะของไฟล์ต้นฉบับเมื่อคัดลอกทุกครั้งที่เป็นไปได้ (แต่ไม่รักษาโครงสร้างไดเร็กทอรี) เทียบเท่ากับตัวเลือกการตั้งค่า. -dpPR-ข ดูการอภิปรายเกี่ยวกับการสำรองข้อมูลด้านล่าง--คัดลอกเนื้อหา (ตั้งแต่ file-utils 4.1) File-utils 4.0 ทำสิ่งที่โง่เขลาโดยพยายามคัดลอกเนื้อหาของอุปกรณ์และไฟล์ FIFO ระหว่างการคัดลอกแบบเรียกซ้ำ ห้ามใช้ตัวเลือกนี้ ด้วยเครื่องมือนี้ `cp' อาจจะแค่หยุดอ่าน FIFO หรือ /dev/tty หรือเติมดิสก์ทั้งหมดโดยการคัดลอก /dev/zero-d คัดลอกลิงก์สัญลักษณ์เป็นลิงก์สัญลักษณ์แทนไฟล์ที่ลิงก์นั้นชี้ไป และรักษาฮาร์ดลิงก์ระหว่างไฟล์ต้นฉบับไว้ในสำเนา --เบาบางใน file-utils 4.0 ตัวเลือก long --no-dereference เป็นคำพ้องสำหรับตัวเลือก -d แต่ใน file-utils 4.1 มันเป็นคำพ้องสำหรับตัวเลือก -P ในขณะที่ตัวเลือก -d เทียบเท่ากับ --no -dereference --preserve options =links -ฉลบไฟล์ที่มีอยู่หากมีข้อผิดพลาดเกิดขึ้นเมื่อเปิดไฟล์เพื่ออ่าน และจะไม่ขอการยืนยันก่อนดำเนินการ (พฤติกรรมนี้เริ่มต้นด้วย file-utils 4.1 ใน file-utils 4.0 ตัวเลือกนี้เทียบเท่ากับ เพิ่มเติมตัวเลือกใหม่ --ลบปลายทาง) (ตั้งแต่ file-utils 4.1) ดูคำอธิบาย POSIX ด้านบน-ฉัน, --แบบโต้ตอบ. ถามว่าควรเขียนทับสิ่งที่มีอยู่หรือไม่ ไฟล์ปกติ-ล, --ลิงค์ สร้างฮาร์ดลิงก์แทนการคัดลอกไฟล์ปกติ (ไม่ใช่ไดเร็กทอรี)-ล, --ความเคารพนับถือ(ตั้งแต่ file-utils 4.1) ดูคำอธิบาย POSIX ด้านบน--ไม่มีการเก็บรักษา= คุณสมบัติ (ตั้งแต่ file-utils 4.1) ไม่บันทึกแอตทริบิวต์ที่ระบุ ดูตัวเลือก --preserve ด้านล่าง-พี, --อนุรักษ์(ตั้งแต่ file-utils 4.1) ดูคำอธิบาย POSIX ด้านบนปกป้องพารามิเตอร์ไฟล์ต้นฉบับ เช่น เจ้าของ กลุ่ม สิทธิ์ และการประทับเวลา --เก็บรักษา= (ตั้งแต่ file-utils 4.1) ที่นี่พารามิเตอร์ ATTRIBUTES สามารถรับค่าใดค่าหนึ่ง "โหมด" (สิทธิ์การเข้าถึง), "ความเป็นเจ้าของ" (เจ้าของและกลุ่ม), "การประทับเวลา" (การประทับเวลา), "ลิงก์", "ทั้งหมด " (ทั้งหมดที่กล่าวมาข้างต้น)-ป, --ไม่มีความเคารพ(เนื่องจาก file-utils 4.0 และ -P) สร้างชื่อของแต่ละไฟล์ที่จะคัดลอกโดยต่อท้ายชื่อของไดเร็กทอรีที่จะคัดลอกเครื่องหมายทับ (/) และชื่อเต็มที่ระบุของไฟล์ต้นฉบับ อาร์กิวเมนต์สุดท้ายที่ได้รับ ซีพีต้องเป็นชื่อของไดเร็กทอรีที่มีอยู่ ตัวอย่างเช่น คำสั่ง cp --parents a/b/c existing_dir จะคัดลอกไฟล์ a/b/c ไปยัง existing_dir/a/b/c สร้างไดเร็กทอรีระดับกลางที่ขาดหายไป -รใน file-utils 4.1: คำพ้องความหมายสำหรับตัวเลือก -R ใน file-utils 4.0: คัดลอกไดเร็กทอรีแบบวนซ้ำ ให้คัดลอกลิงก์ที่ไม่ใช่ไดเร็กทอรีและลิงก์ที่ไม่ใช่สัญลักษณ์ (เช่น FIFO และ ไฟล์พิเศษ) ราวกับว่าเป็นไฟล์ปกติ พฤติกรรมโง่ ๆ นี้สามารถทำได้ใน file-utils 4.1 โดยการระบุตัวเลือก --copy-contents -อาร์, --เรียกซ้ำคัดลอกไดเร็กทอรีซ้ำ ๆ เพื่อป้องกันไดเร็กทอรีที่ไม่ใช่ --ตอบ=ยังไง(ตั้งแต่ file-utils 4.1) ที่นี่อาร์กิวเมนต์ HOW สามารถรับค่าใดค่าหนึ่ง "ใช่", "ไม่", "แบบสอบถาม" โดยกำหนดว่าคำตอบใดที่จะได้รับสำหรับคำถามทั้งหมดโดยอัตโนมัติ: "ใช่", "ไม่" หรือ "สอบถาม" ให้กับผู้ใช้ตามนั้น --ลบปลายทาง(ตั้งแต่ file-utils 4.1) ลบไฟล์ที่มีอยู่ทั้งหมด (ในตำแหน่งที่มีการคัดลอก) ก่อนที่จะทำการคัดลอก ใน file-utils 4.0 ตัวเลือกนี้เปิดใช้งานโดยปริยายเมื่อมีการระบุตัวเลือก -f --เบาบาง=เมื่อไรไฟล์กระจัดกระจายมีรู - ลำดับของไบต์เป็นศูนย์ที่ไม่ได้ใช้บล็อกฟิสิคัลบนดิสก์ การโทรของระบบ read อ่านเป็นศูนย์ วิธีการนี้สามารถประหยัดเนื้อที่ดิสก์และเพิ่มความเร็วในการทำงานได้มากไฟล์ไบนารี ซีพีมีไบต์ศูนย์ติดต่อกันจำนวนมาก โดยค่าเริ่มต้น เมื่อไรระบุช่องโหว่ในไฟล์ต้นฉบับโดยใช้การวิเคราะห์พฤติกรรมแบบง่าย และทำให้ไฟล์เอาต์พุตที่เกี่ยวข้องกระจัดกระจายเช่นกัน พารามิเตอร์: สามารถยอมรับได้ค่าต่อไปนี้ อัตโนมัติลักษณะการทำงานเริ่มต้น: ไฟล์เอาต์พุตจะกระจัดกระจายหากไฟล์อินพุตก็กระจัดกระจายเช่นกัน เสมอทำให้ไฟล์เอาต์พุตกระจัดกระจายเสมอ สิ่งนี้มีประโยชน์เมื่อ ไฟล์อินพุตตั้งอยู่บน ระบบไฟล์ซึ่งไม่รองรับไฟล์กระจัดกระจาย และไฟล์เอาต์พุตจะอยู่ในระบบไฟล์ที่รองรับ ไม่เคยอย่าทำให้ไฟล์เอาต์พุตกระจัดกระจาย หากคุณพบว่ามีการใช้ตัวเลือกนี้ โปรดแจ้งให้เราทราบ --strip-ต่อท้าย-สแลช --สัญลักษณ์ลิงค์สร้างลิงก์สัญลักษณ์แทนการคัดลอกที่ไม่ใช่ไดเร็กทอรี ชื่อไฟล์ต้นฉบับทั้งหมดต้องมีคุณสมบัติครบถ้วน เช่น ขึ้นต้นด้วย / ยกเว้นเมื่อจะสร้างลิงก์สัญลักษณ์ ไดเรกทอรีปัจจุบัน- ตัวเลือกนี้จะสร้างข้อความแสดงข้อผิดพลาดหากระบบไม่รองรับลิงก์สัญลักษณ์ -สส่วนต่อท้ายสำรอง ดูด้านล่าง --เป้าหมายไดเรกทอรี=แคตตาล็อก(ตั้งแต่ file-utils 4.1) ระบุไดเร็กทอรีปลายทางที่จะทำสำเนา มีไว้สำหรับใช้กับ xargs(1) เช่นเดียวกับใน "ls | xargs cp --target- directory=../d" -คุณ --อัปเดตอย่าคัดลอกข้อมูลที่ไม่ใช่ไดเร็กทอรีที่มีอยู่แล้วในตำแหน่งที่กำลังคัดลอกไป หากมีเวลาแก้ไขเท่ากันหรือเร็วกว่านั้น -วี, --รายละเอียดพิมพ์ชื่อของแต่ละไฟล์ก่อนที่จะคัดลอก -x, --one-ระบบไฟล์ข้ามไดเร็กทอรีย่อยที่อยู่บนระบบไฟล์อื่นที่ไม่ใช่ไดเร็กทอรีที่เริ่มต้นการคัดลอก

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

โปรแกรมเวอร์ชัน GNU เช่น ซีพี, MV, ln, ติดตั้งและ แพทช์สามารถทำได้ถ้าจำเป็น การสำรองข้อมูลไฟล์ที่จะถูกเขียนทับ แก้ไข หรือทำลาย หากต้องการ สำเนาสำรองของไฟล์จะถูกสร้างขึ้นโดยใช้ตัวเลือก -b สิ่งที่จะถูกเรียกว่าจะถูกระบุโดยตัวเลือก -V หากชื่อไฟล์สำรองถูกสร้างขึ้นโดยเพิ่มส่วนต่อท้ายให้กับชื่อของไฟล์ต้นฉบับ จากนั้นจะระบุส่วนต่อท้ายโดยใช้ตัวเลือก -S -ข, ซึ่งเป็นข้อยกเว้นทำสำเนาสำรองของไฟล์ที่จะถูกเขียนทับหรือลบ --สำรอง=ควบคุม(ตั้งแต่ fileutils-4.1.) -ส คำต่อท้าย, --คำต่อท้าย=คำต่อท้ายเพิ่ม คำต่อท้ายไปยังชื่อไฟล์เมื่อสร้างสำเนาสำรอง หากไม่ได้ระบุตัวเลือกนี้ ส่วนต่อท้ายก็สามารถตั้งค่าได้โดยใช้ตัวแปรสภาพแวดล้อม SIMPLE_BACKUP_SUFFIX หากไม่มีการระบุตัวเลือกหรือตัวแปร ค่าต่อท้ายเริ่มต้นคือ ~ -ว, วิธี-ว--การควบคุมเวอร์ชัน= -วกำหนดวิธีการตั้งชื่อไฟล์สำรอง การโต้แย้ง สามารถรับค่าที่เป็นตัวเลข (หรือ t) ที่มีอยู่ (หรือไม่มี) และไม่เคย (หรือง่าย) หากไม่ได้ระบุตัวเลือกนี้ ระบบจะใช้ค่าดังกล่าว ตัวแปรสภาพแวดล้อมเวอร์ชัน_การควบคุม - หากไม่ได้ระบุค่าของตัวแปรนี้ จะเป็นประเภทเริ่มต้นการสำรองข้อมูล ถูกตั้งค่าเป็นที่มีอยู่ตัวเลือกนี้ -วสอดคล้องกับตัวแปรควบคุมเวอร์ชันใน Emacs ค่าที่ถูกต้อง are (อนุญาตให้ใช้ตัวย่อที่ชัดเจน):, ทีหมายเลข ทำสำเนาสำรองของไฟล์ตามหมายเลขเสมอ, ไม่มีทำการสำรองข้อมูลไฟล์ตามหมายเลขสำหรับไฟล์ที่มีอยู่แล้ว และสำรองข้อมูลอย่างง่ายสำหรับไฟล์อื่นๆ ระบบไฟล์, เรียบง่ายทำการสำรองข้อมูลอย่างง่ายเสมอ

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

--ช่วยพิมพ์คำใบ้ไปยังเอาต์พุตมาตรฐานและออกได้สำเร็จ --รุ่นพิมพ์ข้อมูลเวอร์ชันไปยังเอาต์พุตมาตรฐานและออกได้สำเร็จ -- ทำหน้าที่ทำเครื่องหมายจุดสิ้นสุดของรายการตัวเลือก

สิ่งแวดล้อม

เมื่อทำงานตามปกติจะมีการใช้ค่าต่างๆ ตัวแปร LANG, LC_ALL, LC_COLLATE, LC_CTYPE และ LC_MESSAGES สำหรับเวอร์ชัน GNU ตัวแปร SIMPLE_BACKUP_SUFFIX และ VERSION_CONTROL ยังใช้เพื่อควบคุมการสร้างการสำรองข้อมูลตามที่อธิบายไว้ข้างต้น

ความเข้ากันได้

POSIX 1003.2

หมายเหตุ

หน้านี้อธิบายเวอร์ชัน ซีพีแพ็คเกจ fileutils-4.1; รุ่นอื่นๆ อาจมีความแตกต่างเล็กน้อย กรุณาส่งการแก้ไขและเพิ่มเติมไปที่: [ป้องกันอีเมล]- กรุณาส่งรายงานข้อผิดพลาดในโปรแกรมนี้ไปที่: [ป้องกันอีเมล].

การแปล

แปลจากภาษาอังกฤษโดย Viktor Vislobokov 2003

แม้ว่าบางครั้งจะใช้คำสั่ง cat เพื่อคัดลอกไฟล์ แต่ใน Linux จะมีคำสั่ง cp พิเศษสำหรับสิ่งนี้ สามารถใช้ในรูปแบบใดรูปแบบหนึ่งต่อไปนี้:

ปลายทางต้นทาง $cp

$ cp source_directory new_directory

ในกรณีแรก ไฟล์ต้นฉบับหรือไดเร็กทอรีจะถูกคัดลอก ตามลำดับ ไปยังไฟล์หรือไดเร็กทอรีปลายทาง และในกรณีที่สอง ไฟล์ที่อยู่ในไดเร็กทอรี source_directory จะถูกคัดลอกไปยังไดเร็กทอรี new_directory หากต้องการคัดลอก คุณต้องมีสิทธิ์ในการอ่านไฟล์ที่กำลังคัดลอกและสิทธิ์ในการเขียนไปยังไดเร็กทอรีที่คุณกำลังคัดลอก

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

คำสั่ง cp มีตัวเลือกที่มีประโยชน์อื่นๆ มากมาย:

ความหมาย

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

หากแหล่งที่มาเป็นไดเร็กทอรี ทั้งไดเร็กทอรีนั้นและไดเร็กทอรีย่อยทั้งหมดที่รวมอยู่ในไดเร็กทอรีนั้นจะถูกคัดลอก กล่าวคือ รูปแบบดั้งเดิมของแผนผังไดเร็กทอรีจะถูกรักษาไว้

หากคุณตั้งค่าตัวเลือกนี้ ลิงก์สัญลักษณ์จะยังคงเป็นลิงก์ (ไม่เช่นนั้น ไฟล์ที่ลิงก์ได้รับจะถูกคัดลอกแทนลิงก์)

เขียนทับไฟล์เมื่อทำการคัดลอก (หากมีอยู่แล้ว) โดยไม่มีคำเตือนเพิ่มเติม

เอ็มวีทีม

หากคุณต้องการย้ายไฟล์จากไดเร็กทอรีหนึ่งไปยังอีกไดเร็กทอรีแทนที่จะคัดลอกไฟล์ คุณสามารถใช้คำสั่ง mv ไวยากรณ์ของคำสั่งนี้คล้ายกับไวยากรณ์ของคำสั่ง cp ยิ่งไปกว่านั้น ขั้นแรกจะคัดลอกไฟล์ (หรือไดเร็กทอรี) จากนั้นจึงลบไฟล์ต้นฉบับ (ไดเร็กทอรี) เท่านั้น และตัวเลือกก็เหมือนกับตัวเลือกของ cp

คำสั่ง mv สามารถใช้ได้ไม่เพียงแต่ในการย้าย แต่ยังใช้เพื่อเปลี่ยนชื่อไฟล์และไดเร็กทอรีด้วย (นั่นคือ ย้ายไฟล์เหล่านั้นภายในไดเร็กทอรีเดียวกัน) ในการดำเนินการนี้ คุณเพียงแค่ต้องระบุชื่อไฟล์เก่าและใหม่เป็นอาร์กิวเมนต์:

$mv ชื่อเก่า ชื่อใหม่

โปรดทราบว่าคำสั่ง mv ไม่อนุญาตให้คุณเปลี่ยนชื่อหลายไฟล์พร้อมกัน (โดยใช้รูปแบบชื่อ) ดังนั้นคำสั่ง mv *.xxx *.yyy จะไม่ทำงาน

เมื่อใช้คำสั่ง mv เช่นเดียวกับเมื่อใช้ cp อย่าลืมใช้ตัวเลือก -i เพื่อรับคำเตือนเมื่อไฟล์ถูกเขียนทับ

คำสั่ง rm และ rmdir

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

หากคุณพยายามใช้คำสั่ง rm (โดยไม่มีตัวเลือกใดๆ) เพื่อลบไดเร็กทอรี คุณจะได้รับแจ้งว่าเป็นไดเร็กทอรีและจะไม่ถูกลบ หากต้องการลบไดเร็กทอรี คุณจะต้องลบไฟล์ทั้งหมดในไดเร็กทอรีนั้น จากนั้นจึงลบไดเร็กทอรีนั้นเองโดยใช้ คำสั่ง rmdir- อย่างไรก็ตาม คุณยังสามารถลบไดเร็กทอรีที่ไม่ว่างเปล่า รวมถึงไดเร็กทอรีย่อยและไฟล์ทั้งหมดได้โดยใช้คำสั่ง rm พร้อมกับตัวเลือก -r

หากคุณออกคำสั่ง rm * มันจะลบไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบัน ไดเรกทอรีย่อยจะไม่ถูกลบ หากต้องการลบทั้งไฟล์และไดเร็กทอรีย่อยของไดเร็กทอรีปัจจุบัน คุณต้องใช้ตัวเลือก -r ด้วย อย่างไรก็ตาม โปรดจำไว้เสมอว่า Linux ไม่มีคำสั่งให้กู้คืนไฟล์หลังจากที่ถูกลบไปแล้ว (แม้ว่าคุณจะจับตัวเองได้ทันทีหลังจากลบไฟล์หรือไดเร็กทอรีโดยไม่ตั้งใจก็ตาม)!

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

คำสั่งที่ใช้ในการคัดลอกไฟล์คือ

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

ไวยากรณ์ในการคัดลอกไฟล์จากที่หนึ่งไปยังอีกที่หนึ่งมีดังนี้:

Cp /source/path/name /target/path/name

  • บ้าน
    • อันเดรเย็กซ์
      • เอกสาร
        • โฟลเดอร์_one
          • file_one
          • file_two
          • file_three
        • โฟลเดอร์_สอง
          • ไฟล์4

หากคุณต้องการคัดลอก file_one จาก ตำแหน่งปัจจุบันใน /home/documents/folder_one ใน /home/documents/folder_two จากนั้นคุณต้องป้อนคำสั่งต่อไปนี้ใน บรรทัดคำสั่ง:

Cp /home/andreyex/documents/folder_one/file_one /home/andreyex/documents/folder_two/file_one

มีทางลัดบางอย่างที่คุณสามารถทำได้ที่นี่

/ ส่วนหลักสามารถแทนที่ด้วยเครื่องหมายตัวหนอน (~) ซึ่งอธิบายไว้ในบทความนี้ สิ่งนี้จะเปลี่ยนคำสั่งเป็นสิ่งนี้

cp ~/documents/folder_one/file_one ~/documents/folder_two/file_one

คุณสามารถละชื่อไฟล์สำหรับเป้าหมายได้ หากคุณต้องการใช้ชื่อไฟล์เดียวกัน

Cp ~/documents/folder_one/file_one ~/documents/folder_two

หากคุณอยู่ในโฟลเดอร์เป้าหมายแล้ว คุณสามารถแทนที่เส้นทางเป้าหมายด้วยการหยุดแบบเต็มได้

Cp ~/documents/folder_one/file_one

หรือหากคุณเข้ามาแล้ว โฟลเดอร์ต้นฉบับคุณสามารถระบุชื่อไฟล์เป็นแหล่งที่มาดังนี้:

วิธีสำรองข้อมูลก่อนคัดลอกไฟล์ใน Linux

ในส่วนก่อนหน้านี้ folder_one มีไฟล์ชื่อ file_one และ folder_two ไม่มี ลองนึกภาพว่า folder_two มีไฟล์ชื่อ file_one และคุณรันคำสั่งต่อไปนี้:

Cp file_one ~/documents/folder_two

คำสั่งด้านบนจะเขียนทับ file_one ซึ่งปัจจุบันอยู่ใน folder_two ไม่มีพร้อมท์ ไม่มีคำเตือน และไม่มีข้อความแสดงข้อผิดพลาดเนื่องจากคุณให้คำสั่งที่ถูกต้อง

คุณสามารถใช้ความระมัดระวังในการคัดลอกไฟล์โดยให้ Linux สร้างสำเนาสำรองของไฟล์ก่อนที่จะเขียนทับ เพียงใช้คำสั่งต่อไปนี้:

Cp -b /source/file /target/file

ตัวอย่างเช่น:

Cp -b ~/documents/folder_one/file_one ~/documents/folder_two/file_one

ตอนนี้โฟลเดอร์ปลายทางจะมีไฟล์ที่ถูกคัดลอก และจะมีไฟล์ที่มีเครื่องหมายตัวหนอน (~) ต่อท้ายด้วย ซึ่งเป็นสำเนาสำรองของไฟล์ต้นฉบับ

คุณสามารถแก้ไขคำสั่ง backup ให้ทำงานในลักษณะที่แตกต่างออกไปเล็กน้อยเพื่อสร้างการสำรองข้อมูลที่มีหมายเลขกำกับ คุณสามารถทำได้หากคุณได้คัดลอกไฟล์แล้วและมีข้อมูลสำรองอยู่แล้ว นี่คือรูปแบบหนึ่งของการควบคุมเวอร์ชัน

Cp --backup=numbered ~/documents/folder_one/file_one ~/documents/folder_two/file_one

ชื่อไฟล์สำหรับการสำรองข้อมูลจะเปลี่ยนไปตามวิธี 1.~1~, file_one.~2~ ฯลฯ

วิธีแจ้งก่อนที่จะเขียนทับไฟล์เมื่อทำการคัดลอกใน Linux

หากคุณไม่ต้องการสำรองไฟล์ในระบบไฟล์ของคุณ แต่คุณต้องการให้แน่ใจว่าคำสั่ง copy ไม่ได้เขียนทับไฟล์โดยไม่เลือกหน้า คุณอาจได้รับแจ้งให้ระบุว่าต้องการเขียนทับหรือไม่

เมื่อต้องการทำเช่นนี้ ใช้ไวยากรณ์ต่อไปนี้:

Cp -i /source/file /target/file

ตัวอย่างเช่น:

Cp -i ~/documents/folder_one/file_one ~/documents/folder_two/file_one

ข้อความจะมีลักษณะดังนี้: cp: เขียนทับ './file1'?

หากต้องการเขียนทับไฟล์ ให้กด Y บนแป้นพิมพ์ หรือหากต้องการยกเลิก ให้กด N หรือ CTRL และ C พร้อมกัน

จะเกิดอะไรขึ้นเมื่อคุณคัดลอกลิงก์สัญลักษณ์ใน Linux

ลองจินตนาการว่าคุณมี โครงสร้างต่อไปนี้โฟลเดอร์:

  • บ้าน
    • อันเดรเย็กซ์
      • เอกสาร
        • โฟลเดอร์_one
          • file_one
        • โฟลเดอร์_สอง
          • file_one (ลิงก์สัญลักษณ์ชี้ไปที่ folder_one/file_one)
        • โฟลเดอร์3

ดูคำสั่งต่อไปนี้:

ซีพี ~/documents/folder_one/file_one ~/documents/folder3/file_one

นี่ไม่ควรมีอะไรใหม่เนื่องจากเป็นการคัดลอก ไฟล์ฟิสิคัลจากโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์หนึ่ง

จะเกิดอะไรขึ้นหากคุณคัดลอกลิงก์สัญลักษณ์จากโฟลเดอร์_สองไปยังโฟลเดอร์3

Cp ~/documents/folder_two/file_one ~/documents/folder3/file_one

ไฟล์ที่ถูกคัดลอกไปยังโฟลเดอร์ 3 จะไม่ใช่ลิงก์สัญลักษณ์ นี่เป็นไฟล์ที่ symlink ชี้ไปจริงๆ ดังนั้น จริงๆ แล้วคุณจะได้ผลลัพธ์แบบเดียวกับที่คุณคัดลอก file_one จาก folder_one

อย่างไรก็ตาม คุณสามารถรับผลลัพธ์เดียวกันได้ด้วยคำสั่งต่อไปนี้:

Cp -H ~/documents/folder_two/file_one ~/documents/folder3/file_one

เพียงเพื่อให้แน่ใจว่ามีสวิตช์อื่นที่บังคับให้คัดลอกไฟล์อย่างแน่นอนและไม่ใช่ symlink:

Cp -L ~/documents/folder_two/file_one ~/documents/folder3/file_one

หากคุณต้องการคัดลอกลิงก์สัญลักษณ์ คุณต้องระบุคำสั่งต่อไปนี้:

Cp -d ~/documents/folder_two/file_one ~/documents/folder3/file_one

Cp -P ~/documents/folder_two/file_one ~documents/folder3/file_one

วิธีสร้างฮาร์ดลิงก์โดยใช้คำสั่ง cp

คู่มือนี้จะบอกทุกสิ่งที่คุณจำเป็นต้องรู้เกี่ยวกับฮาร์ดลิงก์

Cp -l ~/source/file ~/target/file

เพื่อเป็นตัวอย่างว่าทำไมคุณอาจใช้ฮาร์ดลิงก์ ให้พิจารณาว่าคุณมีโฟลเดอร์ชื่อวิดีโอ และภายในโฟลเดอร์วิดีโอนั้นที่คุณมีจริงๆ วิดีโอที่ยอดเยี่ยมไฟล์ชื่อ honeymoon_video.mp4 ตอนนี้ ลองจินตนาการว่าคุณต้องการให้วิดีโอเป็นที่รู้จักในชื่อ barbados_video.mp4 เนื่องจากมีวิดีโอของบาร์เบโดสด้วย

คุณสามารถคัดลอกไฟล์และตั้งชื่อใหม่ได้ แต่นั่นหมายความว่าคุณทำเงินได้มากกว่าสองเท่า พื้นที่ดิสก์โดยพื้นฐานแล้วก็คือวิดีโอเดียวกัน

คุณสามารถสร้างลิงก์สัญลักษณ์ที่เรียกว่า barbados_video.mp4 ซึ่งชี้ไปยังไฟล์ honeymoon_video.mp4 แทน วิธีนี้จะทำงานได้ดี แต่หากมีคนลบ honeymoon_video.mp4 คุณจะเหลือลิงก์และไม่มีอะไรอื่นอีกและลิงก์จะยังคงใช้พื้นที่ดิสก์

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

Cp -l /videos/honeymoon_video.mp4 /videos/barbados_video.mp4

วิธีสร้างลิงก์สัญลักษณ์โดยใช้คำสั่ง cp

Cp -s /source/file /target/file

อีกครั้ง โดยส่วนตัวแล้วฉันจะใช้คำสั่ง ln -s แต่วิธีนี้ใช้ได้ผลดีแทน

วิธีคัดลอกไฟล์หากเป็นไฟล์ใหม่

หากคุณต้องการคัดลอกไฟล์ไปยังโฟลเดอร์ แต่เขียนทับไฟล์ปลายทางเท่านั้นหากไฟล์ต้นฉบับใหม่กว่า คุณสามารถใช้คำสั่งต่อไปนี้:

Cp -u /source/file /target/file

เป็นที่น่าสังเกตว่าหากไม่มีไฟล์อยู่ที่ฝั่งเป้าหมาย ก็จะมีการคัดลอกเกิดขึ้น

วิธีคัดลอกหลายไฟล์

คุณสามารถจัดเตรียมไฟล์ต้นฉบับได้มากกว่าหนึ่งไฟล์ภายในคำสั่งคัดลอกดังนี้:

Cp /source/file_one /source/file_two /source/file_three /target

คำสั่งดังกล่าวจะคัดลอก file_one, file_two และ file_three ไปยังโฟลเดอร์เป้าหมาย

หากไฟล์ตรงกับรูปแบบใดรูปแบบหนึ่ง คุณสามารถใช้ไวด์การ์ดในลักษณะนี้ได้:

Cp /home/andreyex/music/*.mp3 /home/andreyex/music2

คำสั่งดังกล่าวจะคัดลอกไฟล์ทั้งหมดที่มีนามสกุล .mp3 ไปยังโฟลเดอร์ music2

วิธีคัดลอกโฟลเดอร์

การคัดลอกโฟลเดอร์จะเหมือนกับการคัดลอกไฟล์

ตัวอย่างเช่น สมมติว่าคุณมีโครงสร้างโฟลเดอร์ต่อไปนี้:

  • บ้าน
    • อันเดรเย็กซ์
      • เอกสาร
        • โฟลเดอร์_one
          • file_one
          • file_two
        • โฟลเดอร์_สอง

ลองนึกภาพคุณต้องการย้ายโฟลเดอร์ folder_one ไปยังโฟลเดอร์ folder_two ดังนี้:

  • บ้าน
    • อันเดรเย็กซ์
      • เอกสาร
        • โฟลเดอร์_สอง
          • โฟลเดอร์_one
            • file_one
            • file_two

คุณสามารถใช้คำสั่งต่อไปนี้:

Cp -r /home/andreyex/documents/folder_one /home/andreyex/documents/folder_two

หรือคุณสามารถใช้คำสั่งต่อไปนี้:

Cp -R /home/andreyex/documents/folder_one /home/andreyex/documents/folder_two

นี่เป็นการคัดลอกเนื้อหาของ folder_one รวมถึงไดเร็กทอรีย่อยและไฟล์ภายในไดเร็กทอรีย่อย

ประวัติย่อ

คู่มือนี้ได้มอบเครื่องมือที่จำเป็นในการคัดลอกไฟล์บน Linux สำหรับทุกสิ่งทุกอย่าง คุณสามารถใช้คำสั่ง Linux man ได้

ทีมซีพีเป็นผู้ช่วยชีวิตที่จะเข้ามาช่วยเหลือเสมอ หากคุณเพิ่งติดตั้ง Linux และยังไม่ได้ติดตั้ง แต่ในการตั้งค่าการเข้าถึงอินเทอร์เน็ตคุณต้องกำหนดค่า ไฟล์บางไฟล์แล้วทีมงานซีพีจะช่วยเหลือเราไม่เหมือนใคร
สมมติว่าในการตั้งค่าการเข้าถึงอินเทอร์เน็ตคุณต้องเปลี่ยนไฟล์บางไฟล์ แต่เนื่องจากไม่มีสิทธิ์ในการเข้าถึงไฟล์เหล่านี้คุณจึงไม่สามารถทำได้ผ่านอินเทอร์เฟซแบบกราฟิก แต่คุณสามารถสร้างไฟล์โดยใช้ส่วนต่อประสานกราฟิกได้ โฟลเดอร์ที่สามารถเข้าถึงได้(เช่น /home/username) กรอกตามคำแนะนำหรือคู่มือ จากนั้นรันตามด้วย แทนที่ไฟล์ที่มีอยู่ด้วยไฟล์ที่คุณสร้างขึ้นโดยใช้คำสั่ง cp
ตัวอย่างเช่น คุณเหมือนกับฉัน จำเป็นต้องเปลี่ยน /etc/network/interfaces โดยส่วนตัวแล้ว เมื่อใช้อินเทอร์เฟซแบบกราฟิก ฉันสร้างไฟล์อินเทอร์เฟซใน /home/viuktor/ ฉันคัดลอกเนื้อหาของต้นฉบับ (ไฟล์ /etc/network/interfaces) ลงไปแล้วเพิ่มเข้าไป เส้นที่จำเป็นและบันทึกไว้ จากนั้นเมื่อใช้ cp ฉันแทนที่ไฟล์ /etc/network/interfaces ด้วยไฟล์ /home/viuktor/interfaces..
จริงอยู่, สมหวัง การดำเนินการนี้คุณควรให้ความสำคัญสูงสุด เนื่องจากบ่อยครั้งที่ไฟล์บางไฟล์จำเป็นต้องเสริมด้วยหนึ่งบรรทัดขึ้นไป ดังนั้น หากคู่มือแจ้งว่า "เพิ่ม..." ห้ามลืมคัดลอกทุกอย่างจากต้นฉบับลงในไฟล์ที่คุณสร้างขึ้นไม่ว่าในกรณีใด

คำสั่ง cp ใช้เพื่อคัดลอกและย้ายไฟล์

มันมีไวยากรณ์ต่อไปนี้ cp (พารามิเตอร์)<источник> <пункт назначения>

คำอธิบาย ในรูปแบบแรก ยูทิลิตี cp จะคัดลอกเนื้อหาของไฟล์ source_file ไปยัง target_file ในรูปแบบที่สองเนื้อหาของแต่ละอย่าง ไฟล์ที่ระบุคัดลอกไปยัง target_directory ชื่อของไฟล์จะไม่เปลี่ยนแปลง หาก cp ตรวจพบความพยายามที่จะคัดลอกไฟล์ไปยังตัวมันเอง การคัดลอกจะไม่ดำเนินการซึ่งประกอบด้วย หาก source_file ลงท้ายด้วย / ตัวไดเร็กทอรีจะไม่ถูกคัดลอก แต่จะคัดลอกเฉพาะเนื้อหาเท่านั้น ตัวเลือกนี้ยังบังคับให้คัดลอกลิงก์สัญลักษณ์แทนที่จะคัดลอกวัตถุที่ลิงก์นั้นชี้ไป และทำให้ cp สร้างไฟล์พิเศษแทนที่จะคัดลอกเหมือนไฟล์ปกติ ไดเร็กทอรีที่สร้างขึ้นมีสิทธิ์การเข้าถึงเช่นเดียวกับไดเร็กทอรีต้นทาง โดยไม่คำนึงถึงค่า umask ที่มีผลกับกระบวนการ โปรดทราบว่า cp จะคัดลอกฮาร์ดลิงก์เป็นไฟล์แยกกัน หากคุณต้องการจัดเก็บฮาร์ดลิงก์ ให้ใช้ tar(1), cpio(1) หรือ pax(1)-f สำหรับชื่อพาธเป้าหมายที่มีอยู่แล้ว ให้ลบออกและสร้างใหม่ ไฟล์ใหม่โดยไม่ต้องมีการยืนยันการดำเนินการ โดยไม่คำนึงถึงสิทธิ์การเข้าถึง (ตัวเลือก -f จะแทนที่ตัวเลือก -i หรือ -n ที่ระบุไว้ก่อนหน้านี้) -i ทำให้ cp ออกคำขอผ่าน ไฟล์มาตรฐานเกิดข้อผิดพลาดก่อนการคัดลอกไฟล์ ซึ่งจะทำให้ไฟล์ที่มีอยู่ถูกเขียนทับ หากการตอบสนองที่ได้รับจากอินพุตมาตรฐานเริ่มต้นด้วย `y" หรือ `Y" ระบบจะพยายามคัดลอก (ตัวเลือก -i จะแทนที่ตัวเลือก -f หรือ -n ที่ระบุไว้ก่อนหน้านี้) -l ​​สร้างฮาร์ดลิงก์ไปยังไฟล์ปกติในลำดับชั้นแทนที่จะคัดลอก-n อย่าเขียนทับไฟล์ที่มีอยู่ (ตัวเลือก -n จะแทนที่ผลกระทบของตัวเลือก -f หรือ -i ก่อนหน้าใดๆ) -p ทำให้ cp เก็บคุณลักษณะต่อไปนี้ของไฟล์ต้นฉบับแต่ละไฟล์ใน สำเนาที่ถูกสร้างขึ้นโดยแสดงไฟล์ขณะที่กำลังคัดลอก สำหรับไฟล์เป้าหมายแต่ละไฟล์ที่มีอยู่ เนื้อหาจะถูกเขียนทับหากได้รับอนุญาต โหมดการเข้าถึงและ ID ผู้ใช้และกลุ่มจะไม่เปลี่ยนแปลง เว้นแต่จะระบุอ็อพชัน -pรองรับตัวเลือกนี้ แต่ลักษณะการทำงานแตกต่างจากตัวเลือกในอดีต ไม่แนะนำให้ใช้ตัวเลือกนี้อย่างยิ่ง เนื่องจากลักษณะการทำงานของตัวเลือกนั้นขึ้นอยู่กับการใช้งาน บน FreeBSD นั้น -r เป็นคำพ้องสำหรับ -RL และทำงานเหมือนกัน เว้นแต่จะถูกแทนที่โดยแฟล็กอื่น การใช้งาน -r ในเวอร์ชันเก่านั้นแตกต่างกันตรงที่เมื่อสร้างลำดับชั้นของไฟล์ใหม่ ไฟล์พิเศษจะถูกคัดลอกตามปกติ



อ็อพชัน -v และ -n ไม่ใช่มาตรฐาน และไม่แนะนำให้ใช้ในสคริปต์คำสั่ง ดูเพิ่มเติม mv(1), rcp(1), umask(2), fts(3), symlink(7) ประวัติ คำสั่ง cp ถูกนำมาใช้ใน AT&T UNIX เวอร์ชัน 1บทความก่อนหน้านี้
กำลังอัปเดตเฟิร์มแวร์สำหรับสมาร์ทโฟน Samsung Galaxy กำลังเตรียมเฟิร์มแวร์บทความถัดไป