हमेशा ओवरराइट करें या डायरेक्टरी बनाएं


26

मैं एक दूरस्थ सर्वर से एक निर्देशिका को एक नई निर्देशिका (IE सिर्फ नाम बदलकर) को किसी अन्य दूरस्थ सर्वर पर कॉपी करने के लिए scp का उपयोग कर रहा हूं जैसे:

scp -prq server1:dir1 server2:dir2

यह ठीक काम करता है यदि dir2 सर्वर 2 पर मौजूद नहीं है, यह dir2 नामक एक नई निर्देशिका बनाता है जिसमें dir1 से server1 सब कुछ शामिल है।

समस्या तब आती है जब dir2 पहले से ही server2 पर मौजूद है (नोट: मेरे पास पहले से यह जानने का कोई तरीका नहीं है या पहले से dir2 पर एक निष्कासन कर रहा है) - क्या होता है मुझे dir1 की एक प्रति मिलती है, जिसे dir1 कहा जाता है, dir2 में।

मुझे यकीन है कि कुछ बुनियादी है जो मुझे याद आ रही है, लेकिन मैं अभी इसे काम नहीं कर सकता।

किसी भी मदद की बहुत सराहना की!

सादर,

जाइल्स

ठीक है, मेरे पास 10 से कम प्रतिनिधि हैं और 8 घंटे इंतजार करने के लिए $ एड नहीं हो सकता है, इसलिए यहां मुझे क्या मिला है:

यहाँ एक स्क्रिप्ट है जो मेरे लिए काम करती है:

#!/bin/sh
echo "method 1"
scp -prq server1:dir1/* server2:dir2/ >/dev/null  2>&1

if [ "$?" -ne "0" ]; then
        echo "failed ... trying method 2"
        scp -prq server1:dir1 server2:dir2
fi

exit

फिर भी सुनिश्चित नहीं है कि एकल कमांड में यह कैसे किया जाए या हो सके तो भी।

चीयर्स @mindthemonkey, कभी-कभी बस एक ताजा दृष्टिकोण प्राप्त करने से रास्ते को इंगित करने में मदद मिल सकती है।


आपके पास एसपी एक्सेस है लेकिन एसश नहीं?
मैट

यह सही है
जाइल्स

एकमात्र समस्या यह है कि आप किसी भी विफलता पर दूसरी प्रतिलिपि की कोशिश करेंगे, जो जरूरी नहीं कि dir2 मौजूदा नहीं है। हो सकता है कि यदि आप एक परीक्षण के साथ आ सकते हैं, जो वस्तुतः कुछ भी नहीं करता है (एक रिक्त डायर की नकल करें)। फिर आउटपुट के आधार पर या तो scp1 या scp2 चलाते हैं
मैट

अच्छी बात यह है, कि अगर मैं किसी चीज को लेकर आगे आऊंगा और आगे बढ़ने पर ध्यान रखूंगा।
जाइल्स

क्या आप sftp कर सकते हैं? तो एक के उत्पादन की जाँच करें cd dir2
मैट

जवाबों:


34

इस "डॉट" सिंटैक्स का उपयोग करें:

scp -prq server1:dir1/. server2:dir2/

यह निर्देशिका के बजाय उस निर्देशिका की सामग्री की प्रतिलिपि बनाता है। और मेरा मानना ​​है कि यह *ग्लोबिंग की तुलना में अधिक पोर्टेबल है ।


2
-p ⇒ "मूल फ़ाइल से संशोधन समय, पहुंच समय और मोड को संरक्षित करता है।" -r ⇒ "पूरी निर्देशिका को पुन: कॉपी करें।" -q ⇒ "प्रगति मीटर को निष्क्रिय करता है।" स्रोत: computerhope.com/unix/scp.htm
kr85

1
यह मुझे एक त्रुटि देता है:scp: error: unexpected filename: .
एंड्रयू कोस्टर

1

आम तौर पर निर्देशिका निर्माण को नियंत्रित करने के लिए आपको /एक पूर्ण पथ का उपयोग करने के लिए एक अनुगामी का उपयोग करने की आवश्यकता होती है, लेकिन मुझे लगता है कि यह तब निर्देशिका बनाने में विफल रहेगा यदि यह मौजूद नहीं है:

scp -prq server1:dir1/* server2:dir2/

यह भी छिप सकता है। * ग्लोब विस्तार के कारण फाइलें (बिना कुछ मुश्किल शेल विशिष्ट काम के )

आप इसके साथ sshऔर अलग तरीके से संपर्क कर सकते हैं tar

ssh server1 "cd dir1 && tar -cf - ." | ssh server2 "( mkdir -p dir2; cd dir2 && tar -xf - )"

लेकिन इसका मतलब है कि ट्रैफ़िक आपके स्थानीय मशीन से होकर जाता है।


scp -prq server1: dir1 / * server2: dir2 /
जाइल्स

@ क्या तुम कह रहे हो कि काम करता है?
मैट

1
अजीब, मैंने इसे संपादित किया, लेकिन यह खो गया है - नहीं, यह काम नहीं करता है, अगर डायर मौजूद नहीं है, तो एसपीपी एक त्रुटि देता है। इसके अलावा, मेरे पास इस विशेष मामले (उपयोगकर्ता अधिकारों के साथ समस्या) में उपलब्ध नहीं है। यह मुझे एक विचार देता है हालांकि, जैसा कि मैं एक स्क्रिप्ट में कर रहा हूं मैं उपरोक्त कोशिश कर सकता हूं, किसी भी त्रुटि को पकड़ सकता हूं और त्रुटि पर, मेरे पहले पोस्ट से मूल संस्करण का प्रयास कर सकता हूं। मदद के लिए धन्यवाद @mindthemonkey
जाइल्स

1
जब गंतव्य निर्देशिका मेरे लिए मौजूद नहीं होती है, तो यह 'एक निर्देशिका' है।
मैट

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