स्कैल्प के साथ नकल करते समय वाइल्डकार्ड (*) का उपयोग कैसे करें?


144

जब मैं *पथ में वर्णों का उपयोग कर रहा हूं तो मैं scp के साथ कॉपी क्यों नहीं कर सकता ?

scp SERVERNAME:/DIR/* .

*पथ में अनुमति देने के लिए एससीपी को किस कॉन्फ़िगरेशन की आवश्यकता है ?

अद्यतन: समस्या सर्वर की ओर नहीं है; pscp SCPv1 का उपयोग करने की कोशिश कर रहा है, और इसीलिए त्रुटि संदेश:

scp कमांडलाइन और एरर मैसेज के बारे में एक फाइल जिसे *


यह जांचें, इसने मेरे लिए काम किया: https://superuser.com/a/1390405/445746
अमितम

जवाबों:


126

ग्लोब के रूप में scpइलाज करने वाली रिमोट मशीन से बचने के लिए आपको एक शाब्दिक भागने की आवश्यकता है *(ध्यान दें कि यह दोगुना है):

scp 'SERVERNAME:/DIR/\*' .

41
आपको या तो स्टार से पहले उद्धरण या बैकस्लैश की आवश्यकता है, दोनों की नहीं। और scp यह विस्तार करने वाला नहीं है, शेल है।
पैट्रिक

3
या तुमने कोशिश की? मैंने बस किया, ठीक उसी तरह काम करता है जैसा मैंने वर्णित किया (उद्धृत करना और बचना विफलता का कारण बनता है)। User1274964 भी उसके जवाब में व्यवहार की पुष्टि करता है। touch /tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./:scp: /tmp/abcd.*: No such file or directory
पैट्रिक

2
@ पैट्रिक सवाल शाब्दिक तारांकन का उपयोग करने के बारे में है , अर्थात, ग्लोब को पूरी तरह से टालना, रिमोट पर ग्लोब कैसे करना है, इसके बारे में नहीं।
क्रिस डाउन

2
दरअसल सवाल pscpक्लाइंट की तरफ से रिमोट ग्लोबिंग की अनुमति देने को लेकर है।
पैट्रिक

1
हां, यदि आप एकल उद्धरण का उपयोग कर रहे हैं तो तारांकन से बचने की आवश्यकता नहीं है
नेतृत्व किया

52

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

scp 'SERVERNAME:/tmp/file_num\*' .

scp: /tmp/file_num*.csv: ऐसी कोई फ़ाइल या निर्देशिका नहीं

scp 'SERVERNAME:/tmp/file_num*' .

जज_फोर्स_फॉरजॉब_१42१६४२.कॉस्ट १००% ३२ केबी ३२.० केबी / एस ००:००
जजमेंट


4
ठीक है, क्योंकि इसका मतलब है कि आप रिमोट पर ग्लोब करना चाहते हैं । सवाल यह है कि रिमोट पर ग्लोबिंग को कैसे रोका जाए (शाब्दिक रूप से प्राप्त किया जाए *), केवल रिमोट पर ग्लोब कैसे करें।
क्रिस डाउन

3
@ChrisDown। नहीं। उपयोगकर्ता चाहता है कि वाइल्डकार्ड होस्ट पर विस्तारित न हो, और यह चाहता है कि यह रिमोट पर विस्तारित हो, जिससे यह वहां कई फाइलों का मिलान कर सके। लौटाई गई फाइलों में से कोई भी उनमें शाब्दिक '*' नहीं है। क्या आपका मतलब " मेजबान पर ग्लोबिंग रोकना " था?
टिम बर्ड

1

नोट: समाधान नीचे दिए गए परीक्षण और सही ढंग से काम करने के लिए जाना जाता है।

यदि आप जिस पथ से गुजर रहे हैं, उसका एकल भाग आपके पास है तो एकल उद्धरण परिवर्तनशील विस्तार को तोड़ देगा।

यहाँ एक स्क्रिप्ट है जो गोलाकार फ़ाइलनाम कमांड-कॉन्फिगर_ tar.gz * के उपयोग के मामले के लिए DOUBLE उद्धरण का उपयोग करता है।

#!/bin/bash

USEREXECUTINGSCRIPT='admin'
SCRIPTSDIR="myscripts"

SCPUSER='terrencehoulahan'
SCPUSERPASSWD='Change-Me'
SCPHOST='1.2.3.4'
SCPDIRECTORYREMOTE='/Users/terrencehoulahan/Downloads/Ubuntu/18.04'

## Uncomment appropriate below command for your distro to install "sshpass"
#apt-get -y sshpass
#yum -y install sshpass

sshpass -p "$SCPUSERPASSWD" scp -o StrictHostKeyChecking=no $SCPUSER@$SCPHOST:"$SCPDIRECTORYREMOTE/command-configure_*.tar.gz" $(getent passwd|grep ^$(echo $USEREXECUTINGSCRIPT)|cut -d ':' -f6)/$SCRIPTSDIR/

समापन दोहरे उद्धरण के बाद, स्थानीय निर्देशिका लक्ष्य का निर्माण केवल निर्दिष्ट उपयोगकर्ता के होम डायर को / etc / passwd से निकालकर किया जाता है

Scp कमांड अपने आप में पहले से मौजूद है sshpassऔर यूजर इंटरेक्शन के बिना कमांड -o StrictHostKeyChecking=noको पूरी तरह से स्वचालित करने scpके लिए है। कठोर-कोडिंग पथों की तुलना में जटिल लेकिन बेहतर लगते हैं, जो समय-समय पर बदलने की उम्मीद की जाती है।

किसी भी तरह से, दोहरे उद्धरण चिह्नों का उपयोग कर एक उदाहरण जहां आप जिस रास्ते पर चल रहे हैं, वहां विस्तार करने की अनुमति दी जानी चाहिए। HTH

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