2013-02-05 58 views
29

मैं स्रोत फ़ाइल नाम में एक कोलन (:) वर्ण के साथ bash में scp का उपयोग कर फ़ाइल कॉपी करने का प्रयास कर रहा हूं। मेरे आदेश मैं उपयोग कर रहा हूँ की समझ से परे संस्करण है:मैं फ़ाइल नाम में एक कोलन के साथ फ़ाइल कैसे स्कैन कर सकता हूं?

scp file\:\ name.mp4 [email protected]:"/path/to/dest" 

मैं इस त्रुटि मिलती है:

ssh: Could not resolve hostname Portal 2: Name or service not known 

मैं जानता हूँ कि मैं सिर्फ फ़ाइल का नाम बदलने और : को दूर कर सकता है, लेकिन मैं करना चाहते हैं पता है कि कोलन से बचना संभव है या नहीं।

उत्तर

51

नहीं काफी bash बचने समस्या है, यह scp इलाज x: एक [उपयोगकर्ता @] मेजबान उपसर्ग के रूप में है, की कोशिश:

scp ./file:\ name.mp4 [email protected]:"/path/to/dest" 

रिश्तेदार (जैसे ./) या पूरी तरह से योग्य पथ का उपयोग करना (/path/to/source) इस व्यवहार से बचाता है - से पहले / की उपस्थिति OpenSH को संभावित host: या [email protected]: उपसर्ग के लिए जांचना बंद करने का कारण बनती है)। ओपनएसएसएच का scp केवल विशेष-मामले फ़ाइल नाम है कि को कॉलन के साथ समस्याओं के बिना काम करने की इजाजत देता है, इसका सामान्य अर्थ में : से बचने के लिए कोई समर्थन नहीं है, और वैध होस्टनामों की कोई अन्य धारणा नहीं है, इसलिए : के साथ लगभग कोई फ़ाइल नाम इसका कारण बनो

([] संलग्न IPv6 पतों की OpenSSH के साधारण पार्स के कारण, आप कर सकते हैं सफलतापूर्वक जो [ के साथ शुरू, या @[: से पहले होते हैं और ]: शामिल नहीं है, लेकिन है कि आम तौर उपयोगी नहीं है ;-)

: युक्त scp फ़ाइलें

(नीचे पाठ लिखा गया था जब original questionथा मैं पार्टी में एक कॉलन कैसे बच सकता हूँ? यह है कि स्थिति के लिए लागू होता है, लेकिन नहीं scp के रूप में खोल से बचने का कोई राशि वहाँ मदद मिलेगी।)

सवाल का जवाब देने के बारे में कैसे: से बचने के लिए, आप की जरूरत नहीं है, लेकिन "\:" काम करता है।स्थानों है कि एक : प्रयोग किया जाता है:

  1. अशक्त आदेश :, से बचने के लिए कोई जरूरत नहीं है, हालांकि आप कर सकते हैं, बस \e\c\h\o foo है जैसे कि यह आदेश पर कोई प्रभाव नहीं ("कोई प्रभाव नहीं" नहीं पूरी तरह से सच है, अगर आप से बचने के है एक या अधिक वर्ण यह पाएगा एक उपनाम का मिलान नहीं हुआ जा रहा है)
  2. PATH (और अन्य, CDPATH, MAILPATH) मान भागने कोई उपयोगी प्रभाव (मैं एक : युक्त एक निर्देशिका से मेरे रास्ते में एक कार्यक्रम चलाने में असमर्थ रहे हैं है, जो थोड़ा अप्रत्याशित है)
  3. पैरामीटर विस्तार ${name:-x} और अधिक, name[a-zA-Z_][a-zA-Z0-9_] होना चाहिए, इसलिए चर नाम से बचने के लिए कोई जरूरत नहीं है, और के बाद से वहाँ कोई अस्पष्टता नहीं है, पैरामीटर विस्तार के अन्य रूपों
  4. ? : trinary केवल चर और नंबर, कोई जरूरत पर चल रही है में बाद में : से बचने के लिए कोई जरूरत नहीं [[:digit:]] तरह पैटर्न में
  5. == और =~ वर्गों के साथ से बचने के लिए, आप \: साथ बच सकते हैं, लेकिन मैं कैसे कि कभी भी उपयोगी हो सकता है के रूप में एक नुकसान में हूँ ...
  6. आदेश या फ़ंक्शन नाम के भीतर, कोई जरूरत नहीं भागने के लिए, \: का कोई उपयोगी प्रभाव नहीं है
  7. ,210

(ध्यान दें अशक्त आदेश सिर्फ :, आप एक आदेश या समारोह ":foo" की तरह नामित और यह # को भागने के बिना लागू किया जा सकता है इस संबंध में यह अलग है जहां #foo नाम के एक आदेश की आवश्यकता होगी हो सकता है यह है कि बच निकलें।)

+1

वही समस्या 'rsync' को प्रभावित करती है। सौभाग्य से, एक ही समाधान - '/ 'के साथ फ़ाइल नाम उपसर्ग करना - वहां भी मदद करता है। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^