การคัดลอกไฟล์เป็นหนึ่งในงานที่ผู้ใช้เผชิญบ่อยที่สุด คอมพิวเตอร์ส่วนบุคคล- แน่นอนคุณสามารถเปิดตัวจัดการไฟล์ป้อนได้ โฟลเดอร์ที่ต้องการและคัดลอกไฟล์โดยใช้ เมนูบริบท- ไม่มีอะไรจะพูดถึง แต่ในบทความนี้ ฉันต้องการดูการคัดลอกไฟล์ใน 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แม้ว่าบางครั้งจะใช้คำสั่ง 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
- โฟลเดอร์_one
- เอกสาร
- อันเดรเย็กซ์
หากคุณต้องการคัดลอก 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
- โฟลเดอร์_one
- เอกสาร
- อันเดรเย็กซ์
ดูคำสั่งต่อไปนี้:
ซีพี ~/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
- โฟลเดอร์_สอง
- โฟลเดอร์_one
- เอกสาร
- อันเดรเย็กซ์
ลองนึกภาพคุณต้องการย้ายโฟลเดอร์ folder_one ไปยังโฟลเดอร์ folder_two ดังนี้:
- บ้าน
- อันเดรเย็กซ์
- เอกสาร
- โฟลเดอร์_สอง
- โฟลเดอร์_one
- file_one
- file_two
- โฟลเดอร์_one
- โฟลเดอร์_สอง
- เอกสาร
- อันเดรเย็กซ์
คุณสามารถใช้คำสั่งต่อไปนี้:
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 ในเวอร์ชันเก่านั้นแตกต่างกันตรงที่เมื่อสร้างลำดับชั้นของไฟล์ใหม่ ไฟล์พิเศษจะถูกคัดลอกตามปกติ