Kısmen kopyalanmış dosyalarla scp nasıl devam ettirilir? [kapalı]


103

Büyük dosya klasörlerini kopyalamak için scp kabuk komutunu kullanıyorum.

Ancak bir noktada çalışan komutu öldürmek zorunda kaldım (Ctrl + C veya kill ile).

Anladığım kadarıyla scp dosyaları sırayla kopyaladı, bu yüzden sadece bir kısmen kopyalanmış dosya olmalı.

Başarıyla kopyalanan dosyaların üzerine yazmamak ve kısmen kopyalanmış dosyaları düzgün bir şekilde işlemek için aynı scp komutuna nasıl devam edilebilir?

PS Bu tür şeyleri rsync'de yapabileceğimi biliyorum, ancak bazı nedenlerden dolayı scp benim için daha hızlı ve onun yerine kullanıyorum.


4
Rsync'in daha yavaş olduğundan şüpheleniyorum çünkü aktarımı yeniden başlatmanıza izin veren şeyleri yapmak için fazladan biraz zaman harcıyor. Kısmi aktarımı bitirmek için sadece rsync kullanmayı düşünebilirsiniz.
Keith Thompson

2
Akıllı olmak istiyorsanız, her zaman dduygun bir skipdeğişkenle deneyebilir ve boruya geçebilirsiniz ssh:)
Mark Nunberg

1
Bu SO için konu dışı. SuperUser'a aittir ve gerçekten orada sorulmuştur .
Dan Dascalescu

rsync, kapakların altında varsayılan olarak ssh kullanır, Typically, rsync is configured to use ssh by defaultbu yüzden ... yaklaşık olarak hızlı olmalıdır (ancak önce bir dizin listesi yapar, bu daha yavaş bir başlangıç
sağlayabilir

Yanıtlar:


193

Sen kullanmalıdır rsyncüzerindessh

rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path

Anahtar seçenektir -Paynı olan,--partial --progress

Varsayılan olarak rsync, aktarım kesintiye uğrarsa, kısmen aktarılan herhangi bir dosyayı silecektir. Bazı durumlarda, kısmen aktarılan dosyaların saklanması daha çok tercih edilir. --Partial seçeneğinin kullanılması, rsync'e dosyanın geri kalanının daha hızlı aktarılması için kısmi dosyayı korumasını söyler.

-a(Arşiv modu için) ve -z(sıkıştırmayı etkinleştirmek için ) gibi diğer seçenekler de kullanılabilir.

Kılavuz: https://download.samba.org/pub/rsync/rsync.html


50
Sadece rsync'in scp ile başlayan bir toplu kopyaya devam edeceğini not etmek istedim.
Craig Anderson

6
"Dizini atlama" mesajını alacaksınız. siz de belirtmediğiniz sürece hata -r. Kaynak: lucasb.eyer.be/snips/rsync-skipping-directory.html
Artur Czajka

4
Benim için çalıştı, ama --append de ekledim .... rsync -P --append -e ssh remoteuser @ remotehost: / remote / path / local / path
cnd

1
@CraigAnderson, dışarıda bırakılan önemli nokta. Cevap, indirmenin başlamak için rsync ile başlamış olması gerektiği gibi geliyor.
Willa

1
Cevapta verilen seçenekler benim için işe yaramadı, ancak bu işe yaradı:rsync -P -rsh remoteuser@remotehost:/remote/path /local/path
Bunny Rabbit

28

Rsync'e bir alternatif:

Kullanım sftpseçeneğiyle -rve seçeneği (yinelemeli tüm dizinleri kopyalamak) -aarasında sftpbireyin getkomutuyla 'mevcut dosyaların kısmi transferlerini devam ettirin.'

Ön koşul: Sizin sftpuygulaması zaten var getolan -aseçeneği.

Misal:

Dizini /foo/baruzak sunucudan yerel geçerli dizininize kopyalayın . Dizin bar, yerel güncel dizininizde oluşturulacaktır.

echo "get -a /foo/bar" | sftp -r user@remote_server

5
Çözümünüz harika çünkü sunucum ssh'da oturum açmaya izin vermiyor, bu yüzden rsync çalışmıyor. İndirmek yerine yüklemem gerekiyordu, bu yüzden işte benim emrim:echo "put -a foo/bar" | sftp -r server:/foo
Carlos Rafael Ramirez

2
Bu, kısmen indirilmiş dosyaları devam ettirmek için çok uygun bir seçenek gibi görünüyor, çünkü rsync pek ssh dostu değil (varsayılan olmayan bağlantı noktaları ile).
codezombie


5

Başka bir olasılık, durduğunda zaten başlatmış olduğunuz scp'yi kurtarmaya çalışmaktır.

ctrl + z arka plana geçin ve durdurun, ardından alıcı sunucuya ssh gidin ve oturum açın, sonra çıkın. Şimdi scp sürecini tamamlayın ve "durmuş" durumundan devam etmesini izleyin!


Mac OS X'te benim için çalıştı. Bunu yayınladığınız için teşekkürler, bugün pastırmamı kurtardı!
Ben Hitchcock

O :) kendisini canlandırıyor olmadığını görmek için bu şebekeyi Kick
rogerdpack

2

Rsync, başlangıçta iyi çalışırken birkaç saniye sonra da durduğunda, her 60 saniyede bir indirmeyi yeniden başlatmak ve durdurmak için aşağıdaki kaba kuvvet çözümüyle sona erdi:

cat run_me.sh
#!/bin/bash
while [ 1 ]
do
  rsync --partial --progress --rsh=ssh user@host:/path/file.tgz file.tgz &
  TASK_PID=$!
  sleep 60
  kill $TASK_PID
  sleep 2
done

1

Sen yararlanabilir -rshve -Pseçeneklerinden rsync. -Pkısmi indirme içindir ve -rshtransferin ssh procotol üzerinde olduğunu gösterir.

Komple komut şöyle olacaktır: rsync -P -rsh remoteuser@remotehost:/remote/path /local/path


Jordi'nin cevabı ile aynı mı?
rogerdpack

-4

Dün aynı sorunu aldım, scp üzerinden büyük bir sql dökümü aktarıyorum, şanslıydım wget --continue the_url

Bu blog yazısı bunu oldukça iyi açıklıyor http://www.cyberciti.biz/tips/wget-resume-broken-download.html temel olarak:

wget --continue url

Sitenin çökmesi durumunda ilgili parçaları bir url'den yanıta kopyalamak en iyi uygulama olarak kabul edilir.
Ryre

Yüklemeye çalışıyorum, bu yüzden benim için wget yok.
Rolf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.