आंशिक रूप से कॉपी की गई फ़ाइलों के साथ scp को फिर से कैसे शुरू करें? [बन्द है]


97

मैं फ़ाइलों के विशाल फ़ोल्डर को कॉपी करने के लिए scp शेल कमांड का उपयोग करता हूं।

लेकिन किसी समय मुझे रनिंग कमांड (Ctrl + C या मारना) को मारना था।

मेरी समझ से स्कैप कॉपी की गई फ़ाइलों को क्रमिक रूप से, इसलिए केवल एक आंशिक रूप से कॉपी की गई फ़ाइल होनी चाहिए।

सफलतापूर्वक स्कैन की गई फ़ाइलों को अधिलेखित नहीं करने और आंशिक रूप से कॉपी की गई फ़ाइलों को ठीक से संभालने के लिए एक ही scp कमांड को कैसे फिर से शुरू किया जा सकता है?

PS मुझे पता है कि मैं इस तरह का सामान rsync में कर सकता हूं, लेकिन किसी कारण से scp मेरे लिए तेज़ है और मैं इसके बजाय इसका उपयोग करता हूं।


4
मुझे संदेह है कि rsync धीमा है क्योंकि यह कुछ अतिरिक्त समय ऐसे काम करता है जो आपको स्थानांतरण को फिर से शुरू करने की अनुमति देता है। आप आंशिक हस्तांतरण को पूरा करने के लिए rsync का उपयोग करने पर विचार कर सकते हैं।
कीथ थॉम्पसन

2
यदि आप चतुर होना चाहते हैं, तो आप हमेशा ddएक उचित skipचर के साथ कोशिश कर सकते हैं , और ssh:) के लिए पाइप
मार्क नंबर्ग

1
यह SO का विषय है। यह सुपरयूजर पर आधारित है, और वास्तव में वहां पूछा गया है
Dan Dascalescu

जवाबों:


185

आपको rsyncओवर का उपयोग करना चाहिएssh

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

कुंजी विकल्प है -P, जो जैसा है वैसा ही है--partial --progress

अन्य विकल्प, जैसे -a(संग्रह मोड के लिए), और -z(संपीड़न को सक्षम करने के लिए) का भी उपयोग किया जा सकता है।

मैनुअल: https://download.samba.org/pub/rsync/rsync.html


43
बस यह नोट करना चाहता था कि rsync एक बैच कॉपी फिर से शुरू हो जाएगा, जो कि scp के साथ ठीक है।
क्रेग एंडरसन

6
आपको "स्किपिंग डायरेक्टरी" मिलेगी। त्रुटि, जब तक आप भी निर्दिष्ट करें -r। स्रोत: lucasb.eyer.be/snips/rsync-skipping-directory.html
Artur Czajka

4
मेरे लिए काम किया है, लेकिन मैंने जोड़ा --append भी .... rsync -P --append -e ssh Remoteuser @ Remotehost: / रिमोट / पाथ / लोकल / पाथ
cnd

1
@CraigAnderson वह महत्वपूर्ण बिंदु है जिसे छोड़ दिया गया है। उत्तर ऐसा लगता है जैसे यह सुझाव दे रहा है कि डाउनलोड को rsync से शुरू करना चाहिए था।
Willa

1
उत्तर में दिए गए विकल्प मेरे काम नहीं आए, लेकिन इसने किया:rsync -P -rsh remoteuser@remotehost:/remote/path /local/path
बनी खरगोश

26

Rsync का विकल्प:

का प्रयोग करें sftpविकल्प के साथ -rऔर विकल्प (रिकर्सिवली पूरे निर्देशिका कॉपी) -aके sftpके getआदेश मौजूदा फ़ाइलों का आंशिक स्थानान्तरण फिर से शुरू करने।

शर्त: आपका sftpकार्यान्वयन पहले से ही एक विकल्प के getसाथ -aहै।

उदाहरण:

/foo/barदूरस्थ सर्वर से निर्देशिका को अपने स्थानीय वर्तमान निर्देशिका में कॉपी करें । निर्देशिका barआपके स्थानीय वर्तमान निर्देशिका में बनाई जाएगी।

echo "get -a /foo/bar" | sftp -r server

4
आपका समाधान बहुत अच्छा है क्योंकि मेरा सर्वर ssh में लॉगिन की अनुमति नहीं देता है, इसलिए rsync काम नहीं करता है। मुझे डाउनलोड के बजाय अपलोड करने की आवश्यकता है इसलिए यहां मेरी आज्ञा है:echo "put -a foo/bar" | sftp -r server:/foo
कार्लोस राफेल रामिरेज़

1
आंशिक रूप से डाउनलोड की गई फ़ाइलों को फिर से शुरू करने के लिए यह बहुत व्यवहार्य विकल्प लगता है, क्योंकि rsync बहुत ssh के अनुकूल नहीं लगता है (गैर-डिफ़ॉल्ट पोर्ट के साथ)।
कोडजॉम्बी

11

OpenSSH 6.3 के बाद से, आप regetकमांड का उपयोग कर सकते हैं sftp

इसका सिंटैक्स एक जैसा है get, सिवाय इसके कि यह एक मौजूदा स्थानीय फ़ाइल के अंत से स्थानांतरण शुरू करता है।


6

एक और संभावना यह है कि जब आप स्टाल करते हैं तो आपके द्वारा पहले से शुरू किए गए एसपीपी को उबारने की कोशिश की जाती है।

ctrl + z बैकग्राउंड और इसे रोकने के लिए, फिर प्राप्त सर्वर पर ssh और लॉगिन करें, फिर बाहर निकलें। अब scp प्रक्रिया को fg करें और इसे 'स्टाल्ड' से फिर से शुरू करें!


मैक ओएस एक्स पर मेरे लिए काम किया। इसे पोस्ट करने के लिए धन्यवाद, इसने आज मेरे बेकन को बचा लिया!
बेन हिचकॉक

1

जब rsync स्टालों के बाद कुछ सेकंड के बाद शुरू में ठीक चल रहा है, तो मैं निम्नलिखित जानवर बल समाधान के साथ समाप्त हुआ:

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

आप -rshऔर के -Pविकल्पों का उपयोग कर सकते हैं rsync-Pआंशिक डाउनलोड के लिए है और -rshइंगित करता है कि स्थानांतरण ssh procotol पर है।

पूरा कमांड होगा: rsync -P -rsh remoteuser@remotehost:/remote/path /local/path


-5

मुझे कल भी यही मुद्दा मिला, स्कैप के माध्यम से एक विशाल एसक्यूएल डंप को स्थानांतरित करते हुए, मैं भाग्यशाली निकला wget --continue the_url

उस ब्लॉग पोस्ट ने इसे काफी अच्छी तरह से समझाया । http://www.cyberciti.biz/tips/wget-resume-broken-download.html


साइट के नीचे जाने के उत्तर में एक url से संबंधित भागों की प्रतिलिपि बनाना सबसे अच्छा अभ्यास माना जाता है।
रायरे

मैं अपलोड करने की कोशिश कर रहा हूं, इसलिए मेरे लिए कोई भूल नहीं है।
रॉल्फ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.