scp -r… लेकिन एक निर्दिष्ट उपनिर्देशिका को छोड़ दें (बाहर करें)


29

यहाँ निर्देशिका संरचना है:

/a/
/a/b/
/a/c/

मैं सब कुछ कॉपी करना चाहता हूं, / a / c / subdirectory के लिए EXCEPT।

scp -rp myserver:/a .      # this will copy everything

प्रश्न: मैं scp कमांड में बाहर जाने के लिए निर्देशिका कैसे निर्दिष्ट करूंगा?


3
मूल प्रेरणा यह है कि उपनिर्देशिका "/ a / c /" बहुत बड़ी (गीगाबाइट) है, इसलिए इसे छोड़ने से कॉपी मिनटों से सेकंड तक कट जाएगी।
रूसी_स्पे

जवाबों:


28

मुझे नहीं लगता कि आप कर सकते हैं, लेकिन आप rsync का उपयोग कर सकते हैं? कुछ इस तरह:

rsync -a --exclude=a/c myserver:/a .

5

मुझे लगता है कि यह करने का सही तरीका हो सकता है इसलिए आप अभी भी SSH का उपयोग कर रहे हैं, मुझे इसे scp के साथ करने का कोई तरीका नहीं मिला है - लेकिन ss पर rsync का उपयोग करने से इसका समाधान हो सकता है।

rsync -e 'ssh -ax' -av --exclude /a/c myserver:/a .

यदि आप -n स्विच का उपयोग करते हैं तो यह प्रक्रिया का एक सूखा रन बनाएगा:

 rsync -e 'ssh -ax' -av --exclude /a/c -n myserver:/a .

इसके अलावा कोशिश -rz: -e "ssh -i private.pem" -rz 'users@server:/full/path/'
mbrownnyc

1

आप नीचे दिए गए उदाहरण के अनुसार विस्तारित ग्लोबिंग का उपयोग कर सकते हैं:

#Enable extglob
shopt -s extglob

cp -rv !(./excludeme/*.jpg) /var/destination

0

इसे करने का सही तरीका नहीं है, लेकिन आप जिस उप-निर्देशिका को पढ़ना चाहते हैं, उसे ही सेट करें। chmod -R 444 /a/cचाल चलनी चाहिए। जब आपको उस निर्देशिका पर लिखने का प्रयास करने पर "अनुमति अस्वीकृत" त्रुटि मिलेगी।

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