Cara cp file yang tersisa setelah upaya gagal

23

Saya mencoba menyalin direktori besar dari satu drive ke drive lain. Saya keliru logout sebelum selesai jadi hanya sekitar 80% dari file yang disalin. Apakah ada jauh untuk menyalin file yang tersisa tanpa memulai dari awal?

barro32
sumber

Jawaban:

35

Aku akan mencoba,

rsync -a /from/file /dest/file

Anda dapat menggunakan pilihan lain seperti --append, -P (--partial --progress). Lihat man rsync untuk info lebih lanjut.

Atau jika Anda menggunakan cplalu gunakan cp -u.

dari man cp:

-u, --update
     copy only when the SOURCE file is newer than the destination file or when the destination file is missing.
Rahul
sumber
1
Saya harus memberikannya kepada Rahul karena dia baru saja mengalahkan Anda, tetapi terima kasih dan semua orang mendapat dukungan!
barro32
3
Jika salinan pertama berakhir tiba-tiba, salah satu file mungkin disalin hanya sebagian, dan cp -umungkin tidak peduli, karena hanya memeriksa stempel waktu, bukan ukuran ... Jadi, Anda harus ke touchsumber file terlebih dahulu jika Anda harus menggunakannya . (Atau cukup gunakan rsync.)
ilkkachu
@ilkkachu itu benar. Saya akan segera memperbaruinya.
Rahul
Apakah cp pernah meninggalkan satu file hanya ditransfer sebagian? Jika ya, maka -u sepertinya akan meninggalkan Anda dengan direktori yang hanya berfungsi sebagian.
Trevor
15

Untuk transfer file parsial, cpmungkin bukan yang Anda butuhkan.

Saya sarankan menggunakan rsyncsebagai gantinya. Bahkan ketika transfer gagal, Anda cukup menjalankan kembali perintah di lain waktu, dan itu hanya akan menyalin file yang hilang.

Contoh:

$ rsync -aPEmivvz from/ to/

(akan menyalin from/ke to/direktori)

Karena rsyncsinkronisasi dan pemeriksaan setelah setiap transfer, memastikan file telah disalin dengan benar adalah sepele.

Perangkat swich -aPEmivvzadalah pilihan masuk standar saya , setiap kali menyalin file melalui jaringan atau drive eksternal, termasuk perangkat plug-in, seperti SD-Cards, dll.

Ini adalah switch yang saya gunakan hampir selalu:

-a: "arsip", termasuk -rlptgo(rekursif, symlink sebagai symlink, izin, waktu, grup, pemilik)

-P: "sebagian kemajuan" menunjukkan bilah kemajuan yang bagus untuk setiap file

-E: "executability" mempertahankan apakah dapat dieksekusi atau tidak

-m: "noempty" memangkas direktori kosong

-i: "ringkasan" cetak ringkasan perubahan untuk semua pembaruan

-vv: "lebih banyak kata"

-z: "kompresi"

polemon
sumber
6

Apa yang mungkin Anda inginkan daripada cpdalam hal ini adalah rsync.

Hanya menyalin secara rekursif satu struktur direktori ke lokasi baru:

rsync -av /path/to/source /path/to/destination 
Shadur
sumber
4

Anda seharusnya tidak menggunakannya cpuntuk ini. Seperti yang dinyatakan orang lain, itu bukan alat yang tepat untuk pekerjaan itu. Alat yang benar akan tergantung pada tujuan Anda.

Jika Anda hanya ingin salinan langsung:

rsync /source /destinationdengan beberapa tingkat bendera. Lihat jawaban lain untuk beberapa contoh yang sangat bagus.

Jika Anda ingin memiliki pembaruan dua arah

unisonadalah cara untuk pergi. Rsync tidak bekerja dengan sangat baik pada resolusi konflik dengan sinkronisasi dua arah. Khusus menghapus. Jadi, Anda ingin salinan bi-directional menyalaunison

Jika Anda ingin cadangan dan file berbasis teks, maka Anda dapat mencoba menggunakan git. Git dapat dijalankan secara lokal, tidak perlu untuk "server". Bahkan, server git hanyalah metode berbagi file. Anda benar-benar dapat memiliki git repo di drive cadangan dan "dorong" ke sana. Sekali lagi ini hanya berfungsi jika file berbasis teks dan Anda mencoba untuk mendapatkan cadangan satu arah.

Sekali lagi jika Anda mencari cadangan (dan bukan hanya satu kali) maka lihat deja-dupe, BackIntime, atau opsi serupa. Mereka mengambil snapshot data pada suatu titik waktu. Mereka semua menjalankan rsync di bawah tenda.

kapas
sumber
4

Anda juga dapat menyalin semua file lagi, meminta konfirmasi untuk setiap overwrite, lalu secara otomatis menjawab tidak untuk pertanyaan:

yes n | cp -i /source /dest

(Anda mungkin menggunakan lebih banyak opsi, seperti -r, jadi tambahkan saja seperti cp -pri /source /dest...)

Ned64
sumber
3

Gunakan perintah rsyncdengan opsi berikut:

rsync --progress --partial --append /source_file /destination_file
GAD3R
sumber