मैं लिनक्स में एसपीपी कॉपी के लिए पथ में रिक्त स्थान से कैसे बचूं?


307

मैं linux में नया हूँ, मैं रिमोट से लोकल सिस्टम में फाइल कॉपी करना चाहता हूँ ... अब मैं linux सिस्टम में scp कमांड का उपयोग कर रहा हूँ .. मेरे पास कुछ फोल्डर या फाइल्स के नाम स्पेस के साथ हैं, जब मैं कॉपी करने की कोशिश करता हूँ फ़ाइल, यह त्रुटि संदेश दिखाता है: "ऐसी कोई फ़ाइल या निर्देशिका नहीं"

मैंने कोशिश की:

scp ael5105@192.168.0.200:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/

मैंने कुछ संदर्भ ऑनलाइन देखे, लेकिन मैं पूरी तरह से समझ नहीं पाया, क्या इस पर कोई मदद कर सकता है?

मैं प्रतिलिपि बनाने के दौरान फ़ाइल नाम या निर्देशिका नामों में रिक्त स्थान से कैसे बच सकता हूं ...


कोई काम नहीं !! पहले से ही यह कर ..
AlexPandiyan

डबल जांचें कि फ़ाइल वास्तव में मौजूद है। लॉगिन नाम और आईपी पते सहित पूरे मार्ग के उद्धरण रखें। वैकल्पिक रूप से, कोट्स को रिमोट करें और बैकस्लैश के बजाय स्पेस को प्रीपेंड करें।

जवाबों:


491

मूल रूप से आपको इसे दो बार भागने की जरूरत है, क्योंकि यह स्थानीय रूप से और फिर दूरस्थ छोर पर बच गया है।

कुछ विकल्प हैं जो आप कर सकते हैं (बैश में):

scp user@example.com:"'web/tmp/Master File 18 10 13.xls'" .
scp user@example.com:"web/tmp/Master\ File\ 18\ 10\ 13.xls" .
scp user@example.com:web/tmp/Master\\\ File\\\ 18\\\ 10\\\ 13.xls .

11
यह बहुत मामूली है, लेकिन एक मैक पर और टर्मिनल जैसे अधिकांश कंसोल ऐप में 'पेस्ट एस्केप्ड टेक्स्ट' विकल्प है। इसलिए मैंने दूसरा विकल्प इस्तेमाल किया।
पवित्र जूल

3
"" पथ "'ने काम किया जबकि" पथ "विफल रहा; निष्कर्ष सिंगल कोट्स पहले और फिर डबल कोट्स को घेरने के लिए

7
वाह! शायद यही सबसे हास्यास्पद कार्यक्रम व्यवहार है जिसे मैंने देखा है!
jankes

2
@jankes यह गुण के बिना नहीं है। तथ्य यह है कि आप जो कुछ भी रखते हैं वह एक शेल कमांड तर्क है जो आपको scp user@example.com:'$(ls -t | head -1)' .सर्वर में सबसे हाल ही में बनाई गई फ़ाइल scp user@example.com:'dir/*.{xml,pdf}' .प्राप्त करने के लिए या दूरस्थ निर्देशिका से सभी xml और pdf फ़ाइलों को प्राप्त करने के लिए सामान करने की अनुमति देता है । सामान्य तौर पर, मैं उन फाइलों के साथ सुविधा प्राप्त करना पसंद करता हूं जिनमें रिक्त स्थान हैं। रिक्त स्थान वाली फाइलें हमेशा परेशान करती हैं।
जोएल

1
यह 2 बार क्यों बच रहा है? इस व्यवहार को बदलने का कोई तरीका?
फ्रैक्टेल

76

काम करता है

scp localhost:"f/a\ b\ c" .

scp localhost:'f/a\ b\ c' .

काम नहीं करता

scp localhost:'f/a b c' .

कारण यह है कि स्ट्रिंग को कमांड द्वारा पास करने से पहले शेल द्वारा व्याख्या की जाती है। इसलिए जब यह रिमोट के लिए हो जाता है तो रिमोट एक स्ट्रिंग की तलाश करता है जिसमें अनसैप्ड कोट्स होते हैं और यह विफल हो जाता है

इस क्रिया को देखने के लिए, -vx विकल्पों के साथ एक शेल शुरू करें अर्थात bash -vxयह कमांड के प्रक्षेपित संस्करण को प्रदर्शित करेगा क्योंकि यह इसे चलाता है।


सिंगल कोट्स का उपयोग करना और बचना मेरे लिए काम करता है लेकिन दोहरे उद्धरणों में नहीं
मौरिसियो ट्रेजानो

1
@MauricioTrajano gnu.org/software/bash/manual/html_node/Quoting.html पर एक नज़र डालें सभी उद्धरण अलग-अलग काम करते हैं। डबल "या सिंगल के ऊपर के साधारण मामले 'में वही काम करते हैं
वोर्सप्रंग

34

इसके अलावा आप कुछ ऐसा कर सकते हैं:

scp foo@bar:"\"apath/with spaces in it/\""

पहले स्तर के उद्धरण की व्याख्या scp द्वारा की जाएगी और फिर दूसरे स्तर के उद्धरण रिक्त स्थान को संरक्षित करेंगे।


4
यह उत्तर अंडर रेटेड है, इस बात पर विचार करते हुए कि यह कितने रिक्त स्थान से बचने के वर्णों को संभाल सकता है। धन्यवाद!
माइकल

20

निर्देशिका के नामों में रिक्त स्थान से बचने के लिए 3 बैकस्लैश का उपयोग करें:

scp user@host:/path/to/directory\\\ with\\\ spaces/file ~/Downloads

दूरस्थ निर्देशिका से आपकी Downloadsनिर्देशिका में प्रतिलिपि बनाई जानी चाहिए ।filedirectory with spaces


यह केवल एक ही है जिसने मेरे लिए उबंटू 19.10 पर काम किया। कोई भी दोहरे उद्धरण नहीं, कोई नरम और कठोर उद्धरण अंदर और बाहर नहीं, कोई बचा हुआ उद्धरण नहीं। केवल tripplebackslashed रिक्त स्थान। बहुत अजीब। धन्यवाद!
uldics

9

मुझे व्हेलस्पेस के साथ फ़ाइल नाम वाले शेल चर के लिए काम करने में बड़ी कठिनाई हुई । किसी कारण से उपयोग करना

file="foo bar/baz"
scp user@example.com:"'$file'"

जैसा कि @ एड्रियन का जवाब विफल लगता है।

पता चलता है कि क्या सबसे अच्छा काम करता है एक पैरामीटर विस्तार का उपयोग करके व्हाट्सएप पर बैकस्लैश को प्रस्तुत किया जा सकता है , निम्नानुसार।

file="foo bar/baz"
file="${file//\ /\\\ }"
scp user@example.com:"$file"

मैं और अधिक मजबूत 'सब ऑप्शन' विस्तार का सुझाव file="${file//\ /\\\ }"
दूंगा

उस अंतर के बारे में भूल गया - मैं अपने पैरामीटर विस्तार पर जंग खा रहा हूं। धन्यवाद!
ल्यूक डेविस

मेरे पास एक चर नहीं था, लेकिन इसने मुझे बहुत सारे रिक्त स्थान वाले मार्ग के लिए 3 बैकस्लैश के लिए एक अच्छा विकल्प के रूप में संतुष्ट किया। उसके लिए किसी के पास समय नहीं है!
राबर्ट डंडन

1

विंडोज 10 पर पॉवर्सशेल के लिए इस टिप को डालने के लिए इस लिनक्स प्रश्न का उपयोग करने के लिए क्षमा करें: बैकस्लैश के साथ या आसपास के उद्धरण के साथ भागने वाला स्पेस चार इस मामले में मेरे लिए काम नहीं करता था। कुशल नहीं है, लेकिन मैंने इसे "का उपयोग करके हल किया है?" इसके बजाय चार:

फ़ाइल के लिए "functions.txt Jun-22.bkp" मैंने इसे "functions.txt? Jun-22.kk" का उपयोग करके डाउनलोड किया।

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