วิธี cp ไฟล์ที่เหลือหลังจากพยายามล้มเหลว


23

ฉันกำลังพยายามคัดลอกไดเรกทอรีขนาดใหญ่จากไดรฟ์หนึ่งไปยังอีกไดรฟ์ ฉันออกจากระบบโดยไม่ตั้งใจก่อนที่จะเสร็จสิ้นดังนั้นประมาณ 80% ของไฟล์ที่คัดลอกมา มีการคัดลอกไฟล์ที่เหลือโดยไม่เริ่มต้นหรือไม่?

คำตอบ:


35

ฉันจะพยายาม,

rsync -a /from/file /dest/file

คุณสามารถใช้ตัวเลือกอื่น ๆ เช่น,--append -P (--partial --progress)ดูman rsyncสำหรับข้อมูลเพิ่มเติม

หรือถ้าคุณใช้cpงานcp -uอยู่ให้ใช้

จากman cp:

-u, --update
     copy only when the SOURCE file is newer than the destination file or when the destination file is missing.

1
ฉันจะต้องมอบให้กับราหุลยูเอสเขาเพิ่งเอาชนะคุณไป แต่ขอบคุณและทุกคนได้รับ upvote!
barro32

3
หากการคัดลอกครั้งแรกสิ้นสุดลงในทันทีไฟล์ใดไฟล์หนึ่งอาจถูกคัดลอกเพียงบางส่วนเท่านั้นและcp -uอาจไม่สนใจเนื่องจากจะตรวจสอบเฉพาะการประทับเวลาไม่ใช่ขนาด ... ดังนั้นคุณต้องtouchใช้ไฟล์ต้นฉบับก่อนหากคุณต้องใช้มัน . (หรือใช้เพียงrsync)
ilkkachu

@ilkkachu ถูกต้อง ฉันจะอัปเดตในไม่ช้า
ราหุล

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

15

สำหรับการถ่ายโอนไฟล์บางส่วนcpอาจไม่ใช่สิ่งที่คุณต้องการ

ฉันแนะนำให้ใช้rsyncแทน แม้ว่าการถ่ายโอนล้มเหลวคุณสามารถเรียกใช้คำสั่งอีกครั้งในภายหลังและมันจะคัดลอกเฉพาะไฟล์ที่หายไป

ตัวอย่าง:

$ rsync -aPEmivvz from/ to/

(จะคัดลอกfrom/ไปยังto/ไดเรกทอรี)

เนื่องจากrsyncการซิงค์และการตรวจสอบหลังจากการถ่ายโอนแต่ละครั้งทำให้การคัดลอกไฟล์อย่างถูกต้องเป็นเรื่องเล็กน้อย

ชุด swich -aPEmivvzเป็นตัวเลือกgo-toมาตรฐานของฉันทุกครั้งที่คัดลอกไฟล์ผ่านเครือข่ายหรือไดรฟ์ภายนอกรวมถึงอุปกรณ์ปลั๊กอินเช่นการ์ด SD และอื่น ๆ

นี่เป็นสวิตช์ที่ฉันใช้เกือบทุกครั้ง:

-a: "เก็บถาวร", รวมถึง-rlptgo(เรียกซ้ำ, symlink เป็น symlink, การอนุญาต, เวลา, กลุ่ม, เจ้าของ)

-P: "ความคืบหน้าบางส่วน" แสดงแถบความคืบหน้าที่ดีสำหรับแต่ละไฟล์

-E: "ความสามารถในการปฏิบัติงาน" จะรักษาความสามารถในการปฏิบัติการได้

-m: "noempty" ลูกพรุนที่ว่างเปล่า

-i: "สรุป" พิมพ์สรุปการเปลี่ยนแปลงสำหรับการอัพเดททั้งหมด

-vv: "verbose เพิ่มเติม"

-z: "การบีบอัด"


6

สิ่งที่คุณอาจต้องการมากกว่าในกรณีนี้คือcprsync

เพียงแค่คัดลอกโครงสร้างไดเรกทอรีหนึ่งซ้ำไปยังตำแหน่งใหม่:

rsync -av /path/to/source /path/to/destination 

4

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

หากคุณต้องการสำเนาตรง:

rsync /source /destinationด้วยธงบางระดับ ดูคำตอบอื่น ๆ สำหรับตัวอย่างที่ดีจริงๆ

หากคุณต้องการอัพเดตแบบสองทิศทาง

unisonเป็นวิธีที่จะไป Rsync ทำได้ดีในการแก้ไขข้อขัดแย้งด้วยซิงค์แบบสองทิศทาง ลบพิเศษ คุณต้องการให้สำเนาสองทิศทางสว่างขึ้นunison

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

อีกครั้งหากคุณต้องการสำรองข้อมูล (ไม่ใช่เพียงครั้งเดียว) ให้ดูตัวเลือก deja-dupe, BackIntime หรือที่คล้ายกัน พวกเขาใช้ภาพรวมของข้อมูลในเวลา พวกเขาทั้งหมดทำงาน rsync ภายใต้ประทุน


4

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

yes n | cp -i /source /dest

(คุณอาจใช้ตัวเลือกเพิ่มเติมเช่น-rดังนั้นเพียงเพิ่มเช่นcp -pri /source /dest... )


3

ใช้คำสั่งrsyncด้วยตัวเลือกต่อไปนี้:

rsync --progress --partial --append /source_file /destination_file
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.