क्या किसी फ़ाइल के बाधित स्कैप को फिर से शुरू करने का एक तरीका है?


12

मैं कभी-कभार scp के माध्यम से एक बहुत बड़ी फ़ाइल डाउनलोड कर रहा हूं और कनेक्शन के हर बार मध्य-मार्ग को छोड़ने और काटने का एक छोटा मौका है।

क्या इसे फिर से शुरू करने का कोई तरीका है?

जवाबों:


9

आप निम्न अनुमोदन का प्रयास कर सकते हैं: डाउनलोड किए गए भाग को छोड़ने के लिए scp उपयोग dd के बजाय और शेष को फ़ाइल में जोड़ें।

sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile

संभव अनुकूलन: बड़े ब्लॉकों के साथ काम करते हैं। चलो इसे एक होमवर्क के रूप में छोड़ दें।


मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन समाधान के लिए एक महान दृष्टिकोण की तरह dd ध्वनियों का उपयोग करने के बाद से उत्तर को अस्थायी रूप से स्वीकार कर रहा हूं।
जीजे

मैंने अभी इसका परीक्षण किया, पूरी तरह से काम करता है, धन्यवाद!
कोस्क

@ कोसक, सुनकर अच्छा लगा!
yrk

ddछोटे ब्लॉकों के साथ धीमी गति से (सिर्फ 350 kB / s यहाँ) हो सकता है। सौभाग्य से, scpस्थानांतरण 1024 बाइट ब्लॉक में आते हैं। यदि आपकी फ़ाइल के लिए ऐसा है (या फिर, इसे निकटतम 1024 बाइट ब्लॉक में काटकर), तो आप इसे इस तरह से गति दे सकते हैं ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile:। (ध्यान दें कि $sofarतब स्किप करने के लिए 1024 बाइट ब्लॉक की संख्या होनी चाहिए!)
tanius

2
मुझे यह महसूस करने में कुछ समय लगा कि rsysदूसरी पंक्ति में सिर्फ एक उदाहरण है hostname के लिए कुछ विशेष तर्क नहीं ssh। मेरा सुझाव है कि आप इसे user@hostभ्रम से बचने के लिए प्रतिस्थापित करें ।
अहमद एस्सेम

7

के साथ scp, नहीं।

यदि दोनों छोरों में यह है, तो आप rsync -LvzP remoteserver:path/to/file localfileएक फ़ाइल को स्थानांतरित करने के लिए उपयोग कर सकते हैं ।


इससे मुझे एक बड़ी फ़ाइल डाउनलोड करने में घंटों की बचत हुई जो बाधित हो गई। धन्यवाद।
फेटे

3

हां, रुकावट के बिंदु से फिर से शुरू करने के तरीके हैं, लेकिन यह एससीपी का उपयोग करना संभव नहीं है। sftp reget filenameआपको क्या चाहिए Yarek और Grawity ने वैध समाधान प्रदान किए हैं जो I +1 दोनों के लिए हैं, लेकिन रुकावट के एक बिंदु से फिर से शुरू करने के लिए, मुझे rsync पसंद है। उदाहरण कमांड प्रदान करते हैं कि दोनों मान लेते हैं कि आप दूरस्थ सर्वर से अपने स्थानीय कार्य केंद्र (डाउनलोडिंग) में एक फ़ाइल प्राप्त कर रहे हैं। कृपया ध्यान रखें कि अंतिम दो मापदंडों को उस क्रम में source_file और target_file माना जाना चाहिए। फ़ाइलनाम का वाक्य-विन्यास इस आधार पर भिन्न होता है कि स्रोत या लक्ष्य फ़ाइल स्थानीय है या दूरस्थ। अगर मैं [पाठ] फाइलें भेज रहा था, तो मैं दिए गए उदाहरणों को फिर से लिखूंगा:

# स्थानीय से रिमोट तक
sofar = `ssh Remote_system ls -l इंटरप्टेड_फाइल | awk '{प्रिंट $ 5}' ';
dd if = source_file bs = 1 Skip = $ sofar | ssh Remote_system "बिल्ली >> ./interrupted_file"

और rsync समाधान के लिए, मैं जोड़ता हूं -e ssh। आपको इस बात पर विचार करना चाहिए कि क्या आपको वर्बोसिटी, कम्प्रेशन, ओनरशिप, परमिशन, टाइमस्टैम्प, रिकर्स डाइरेक्टरीज़ आदि की ज़रूरत है, -L पैरामीटर के बारे में मैन पेज और गूगल चेक करें। आप चाहते हैं कि सहानुभूति उन्हें संदर्भित करने के बजाय लिंक के रूप में बनी रहे।

rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file


1

इसका एक और समाधान है ( rsyncया ddयहाँ बताए गए समाधानों के अलावा ) जो मुझे आश्चर्य है कि किसी ने भी उल्लेख नहीं किया है: यह इसकी reputआज्ञा है sftp


0
scp -o ConnectTimeout 60

आपको किसी कनेक्शन के लिए टाइमआउट निर्दिष्ट करने देता है। अपने संबंध को टूटने से बचा सकते हैं।


0

हां, अगर दोनों छोर sftp को सपोर्ट करते हैं - तो scp remoteuser@remotehost:/absolute/filename .फेल होने के बाद आप किस कर सकते हैं sftp remoteuser@remotehostऔर फिर reget /absolute/filenameडाउनलोड को फिर से शुरू कर सकते हैं।

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