प्रतिलिपि निर्देशिका निर्देशिका पुनरावृत्ति कर सकते हैं?


572

वर्तमान में मैं केवल एक .tarफाइल कॉपी कर सकता हूं । लेकिन मैं निर्देशिकाओं की नकल कैसे कर सकता हूं scp?

जवाबों:


935

हाँ, उपयोग करें -r:

scp -rp sourcedirectory user@dest:/path
  • -r का अर्थ है पुनरावर्ती
  • -p मूल फ़ाइल से संशोधन समय, पहुंच समय और मोड को संरक्षित करता है।

नोट: यह sourcedirectoryअंदर बनाता है /pathइस प्रकार फाइलें अंदर होंगी/path/sourcedirectory


9
हालाँकि यह ध्यान रखें कि यह सिम्बलिंक को संरक्षित नहीं करेगा।
CpnCrunch

12
ध्यान दें कि -pr(उल्टे क्रम में विकल्प) फ़ोल्डरों की नकल नहीं करेंगे, बल्कि उनकी सामग्री को लक्ष्य निर्देशिका (जाहिर है, विकल्पों के क्रम) के लिए।
pms

171

जबकि पिछले उत्तर तकनीकी रूप से सही हैं, आपको rsyncइसके बजाय उपयोग करने पर भी विचार करना चाहिए । rsyncभेजने और प्राप्त करने वाले पक्षों के डेटा को एक अलग तंत्र के साथ तुलना करता है ताकि इसे पहले से भेजे गए डेटा को फिर से भेजना न पड़े।

यदि आप किसी दूरस्थ मशीन में एक से अधिक बार कुछ कॉपी करने जा रहे हैं, तो उपयोग करें rsync। वास्तव में, यह rsyncहर बार उपयोग करने के लिए अच्छा है क्योंकि इसमें फ़ाइल अनुमतियों की प्रतिलिपि बनाने और कुछ फ़ाइलों या निर्देशिकाओं के स्वामित्व और स्वामित्व जैसी चीजों पर अधिक नियंत्रण है। सामान्य रूप में:

$ rsync -av /local/dir/ server:/remote/dir/

एक दूरस्थ निर्देशिका के साथ एक स्थानीय निर्देशिका सिंक्रनाइज़ करेगा। यदि आप इसे दूसरी बार चलाते हैं और स्थानीय निर्देशिका की सामग्री नहीं बदली है, तो कोई भी डेटा स्थानांतरित नहीं किया जाएगा - scpहर बार चलाने और कॉपी करने की तुलना में बहुत अधिक कुशल ।

इसके अलावा, rsyncआप इसके विपरीत, बहुत आसानी से बाधित स्थानान्तरण से उबरने की अनुमति देता है scp

अंत में, rsyncssh पर डिफ़ॉल्ट रूप से आधुनिक संस्करण चलते हैं, इसलिए यदि scpपहले से ही काम कर रहे हैं, rsyncतो बहुत ज्यादा ड्रॉप-इन प्रतिस्थापन होना चाहिए।


1
मैं मानता हूं rsyncकि अधिक कुशल है। एक चीज जो वर्तमान में नहीं है, scpवह है दूरस्थ होस्ट्स के बीच कॉपी करने की अनुमति देना (कम से कम उनमें से किसी एक पर rsync क्लाइंट को चलाए बिना)।
सेड्रिक नाइट

1
-av: v क्रिया के लिए है, संग्रह के लिए है और एक शॉर्टकट है-surptgoDD जिसका अर्थ है पुनरावर्ती, अधिकार के मालिक की तारीखों और लिंक को संरक्षित करना। यदि आप केवल पुनरावर्ती उपयोग चाहते हैं-r
pdem


10

पुनरावर्ती प्रतिलिपि विकल्प '-r' (निचला मामला)

scp -r

जिसे मैं नियमित स्थानीय पुनरावर्ती प्रतिलिपि विकल्प '-R' (ऊपरी मामले) के साथ भ्रमित करता हूं

cp -R

1
मैं सिर्फ cp और scp के बीच अंतर को इंगित करना चाहता था -r और -R समान नहीं हैं। unix.stackexchange.com/questions/18712/…
तरुण

6

सबसे अच्छा तरीका है SSH पर rsync का उपयोग करना

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

मेरे पसंदीदा विकल्प हैं -

  • -a: संग्रह मोड (कई सामान्य सामान्य विकल्पों में शामिल हैं, जिसमें सीमलिंक को संरक्षित करना शामिल है)
  • -झ: सेक
  • -v: वर्बोज़: फ़ाइलें दिखाएँ
  • -P - फ़ाइलों की गई / शेष फ़ाइलों के रूप में दिखावा करें
  • -एस ssh: ss प्रोटोकॉल में rsync करें
  • --delete: गंतव्य में अब और नहीं हैं कि गंतव्य में फ़ाइलों को हटा दें

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

4

पुनरावर्ती प्रतिलिपि ध्वज की तलाश करने के बाद, और सफलतापूर्वक इस पोस्ट के लिए धन्यवाद का उपयोग किया, मैं सिर्फ एक सुझाव पोस्ट करना चाहूंगा।

यदि मामला यह है कि आप एक निर्देशिका की प्रतिलिपि (पुनरावर्ती) कर रहे हैं। हो सकता है कि यदि फ़ाइलें संपीड़ित भेजी जाएँ तो आप स्थानांतरण में समय बचा सकते हैं

अंत में मैंने क्या किया:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

उम्मीद है की यह मदद करेगा


फ़ाइल एक्सटेंशन .tar.gzया तो होना चाहिए या .tgzक्योंकि फ़ाइल एक gzipped टार संग्रह है (जब से -zध्वज का उपयोग किया जाता है)।
एंथोनीबेल

2

आप किसी निर्देशिका को इस सरल कमांड के साथ एक संक्षिप्त संग्रह में कॉपी कर सकते हैं:

ssh -p 22 user@address-to-copy-from.com  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

उदाहरण के लिए, की सामग्री की प्रतिलिपि करने के लिए /var/logसे domain.comकरने के लिए ~/logs.tgzआप चलाएँ:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

आप पाइप का उपयोग करके लक्ष्य प्रणाली पर फ़ाइलों को भी निकाल सकते हैं। यह आदेश की सामग्री की प्रतिलिपि होगा /var/logपर domain.comकरने के लिए ~/destination/logअपने सिस्टम पर:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

हालांकि एक निर्देशिका को दर्पण करने के लिए, आपको संभवतः उपयोग करना चाहिए rsync...


1

यदि आप उपयोगकर्ता के पासवर्ड को अंतःक्रियात्मक रूप से इनपुट करने के बजाय एक पैरामीटर के रूप में पास करना पसंद करते हैं, तो आप sshpass( sudo apt-get install -y sshpass) का उपयोग कर सकते हैं ।

उदाहरण:

sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder

0

आप किसी भी सिस्टम पर पुनरावर्ती निर्देशिकाओं को कॉपी करने के लिए sc कमांड के साथ -r विकल्प का उपयोग कर सकते हैं। यदि आपको किसी और चीज की जरूरत है तो scp कमांड ट्यूटोरियल देखें । -r विकल्प ज्यादातर लिनक्स कमांड में पुनरावर्ती संचालन के लिए खड़ा है।


जबकि सच है, -rविकल्प पहले से ही वर्षों पहले सुझाया गया है और स्वीकृत उत्तर है।
राल्फफ्राइडल

-3

एक और (दोहराया उपयोग के लिए बेहतर संभावना) विकल्प एनएफएस का उपयोग करना है - एनएफएस-कर्नेल-सर्वर की जांच करें और एनएफएस शेयरों को कैसे सेटअप करें।


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