Jawaban:
Anda dapat mencoba pendekatan berikut: alih-alih scp gunakan dd untuk melewati bagian yang diunduh dan menambahkan sisanya ke file.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Kemungkinan pengoptimalan: bekerja dengan blok besar. Mari kita tinggalkan ini sebagai pekerjaan rumah.
dd
dengan blocksize kecil bisa lambat (hanya 350 kB / dtk di sini). Untungnya, scp
transfer tampaknya datang dalam blok 1024 byte. Jika jadi untuk file Anda (atau yang lain, oleh truncating ke terdekat 1024 blok byte), Anda dapat mempercepat itu seperti ini: ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
. (Perhatikan bahwa $sofar
jumlah blok yang harus dilewati adalah 1024 byte!)
rsys
di baris kedua hanyalah contoh nama host, bukan argumen khusus untuk ssh
. Saya sarankan Anda menggantinya dengan user@host
untuk menghindari kebingungan.
Dengan scp
, tidak.
Jika kedua ujungnya memilikinya, Anda dapat menggunakannya rsync -LvzP remoteserver:path/to/file localfile
untuk mentransfer satu file.
Ya, ada beberapa cara untuk melanjutkan dari titik interupsi, tetapi tidak mungkin menggunakan scp. sftp reget filename
lakukan apa yang kamu butuhkan. Yarek dan Grawity telah memberikan solusi valid yang saya beri +1 untuk keduanya, tetapi untuk melanjutkan dari titik interupsi, saya suka rsync. Contoh perintah yang diberikan keduanya menganggap Anda mengambil file dari server jauh ke workstation lokal Anda (mengunduh). Harap diingat bahwa dua parameter terakhir harus dianggap source_file dan target_file dalam urutan itu. Sintaks nama file bervariasi berdasarkan pada apakah sumber atau file target lokal atau jauh. Jika saya mengirim (mengunggah) file [teks], saya akan menulis ulang contoh yang diberikan sebagai:
#Dari lokal ke jarak jauh sofar = `ssh remote_system ls-l interrupted_file | awk '{print $ 5}' `; dd if = source_file bs = 1 skip = $ sofar | ssh remote_system "cat >> ./interrupted_file"
Dan untuk solusi rsync, saya tambahkan -e ssh
. Anda harus mempertimbangkan apakah Anda perlu verbositas, kompresi, mempertahankan kepemilikan, izin, stempel waktu, direktori perulangan, dll. Periksa halaman manual dan google, mengenai parameter -L. Anda mungkin ingin symlink tetap sebagai tautan alih-alih merujuknya.
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
scp -o ConnectTimeout 60
Memungkinkan Anda menentukan batas waktu koneksi. Dapat menjaga koneksi Anda dari putus.
Ya, jika kedua ujungnya mendukung sftp - setelah scp remoteuser@remotehost:/absolute/filename .
gagal Anda dapat melanjutkan dengan melakukan sftp remoteuser@remotehost
dan kemudian reget /absolute/filename
melanjutkan pengunduhan.