Scp copy की छुपी हुई फाइल कैसे बनाये?


63

मैं अक्सर फाइलों को कॉपी करने के लिए एससीपी का उपयोग करता हूं - विशेष रूप से वेब से संबंधित फाइलें। समस्या यह है कि जब भी मैं ऐसा करता हूं, मुझे छिपी हुई फ़ाइलों (जैसे .htaccess) की प्रतिलिपि बनाने के लिए मेरी आज्ञा नहीं मिल सकती है।

मैं आमतौर पर यह आह्वान करता हूं:

scp -rp src/ user@server:dest/

यह छिपी हुई फ़ाइलों की प्रतिलिपि नहीं करता है। मैं इसे फिर से लागू नहीं करना चाहता (जैसे कुछ करके scp -rp src/.* ...- और वैसे भी इसके अजीब .और ..निहितार्थ हैं।

मुझे scpमैन पेज में "छिपी हुई फ़ाइलें शामिल करें" के बारे में कुछ भी नहीं दिखाई दिया ।

मैं यह कैसे हासिल कर सकता हूं?


मुझे लगता है कि src/.*प्रतियां भी src/..(मूल निर्देशिका), सही?
केन शार्प

जवाबों:


67

यह छिपी हुई फ़ाइलों से बिल्कुल मेल खाना चाहिए। स्रोत के अंत में / "इस निर्देशिका के तहत हर फ़ाइल" कहती है। फिर भी, परीक्षण और अनुसंधान आपको सहन करते हैं। यह मूर्खतापूर्ण व्यवहार है।

" उत्तर " स्रोत के अंत में एक बिंदु जोड़ना है:

scp -rp src/. user@server:dest/

असली जवाब rsync उपयोग करने के लिए है।


अच्छी चाल मुझे यह अभी तक महसूस नहीं हुआ था।
cstamas

21
rsync -avz -e ssh --progress src / user @ सर्वर: dest /
मिकीबी

2
मैं उस व्यवहार को पुन: पेश नहीं कर सकता। scp -r source/ host:source2कॉपी डॉट फाइलें। 2007 से ओपनएसएसएच 5.1 में काम करता है।
मिकेल

3
ध्यान दें कि .सुरक्षा मुद्दों के कारण अब (2019) अंत में काम नहीं कर रहा है। इसे यहाँ समझाया गया है: superuser.com/questions/1403473/scp-error-unexpected-filename
Stéphane

25

आप rsync की कोशिश कर सकते हैं। यह इस नौकरी के लिए बेहतर है:

rsync -av src / user @ सर्वर: डेस्ट /

(और इसका मैनुअल पेज पढ़ने लायक है।)


2
मैं हमेशा rsync के लिए --progress विकल्प का उपयोग करता हूं, मैं इसके बिना नहीं रह सकता = D
Hofa

1
@ हेलो मैं आमतौर पर पी का उपयोग करता हूं। क्योंकि यह छोटा है, पहले से ही --प्रोग्रेस शामिल है और इसमें वह भी शामिल है - अगर मैं पहले से ही इसकी प्रगति में दिलचस्पी रखता हूं, तो समझ में आ सकता है ;-)
cstamas

9

स्रोत निर्देशिका के बाद एक स्लैश मत डालो। आपका कोड इस तरह दिखेगा:

scp -rp src user@server:dest/

यह रिमोट मशीन पर 'डिस्ट' के तहत एक निर्देशिका 'src' बनाएगा, जिसमें सभी छिपी हुई फाइलें शामिल होंगी। यह संभवत: वैसा नहीं है जैसा आप चाहते हैं, लेकिन यह src में छिपी हुई फ़ाइलों की नकल करेगा।


3

निम्नलिखित समस्या को हल करेगा, यह हमारे निरंतर एकीकरण पर्यावरण पर पूरी तरह से परीक्षण किया गया है

scp -rp src/. user@server:dest/
example scp -rp /usr/src/code/. content001@172.11.11.11:/usr/dest/code/

आशा है ये मदद करेगा


हाल ही में scp अपडेट करने के बाद, यह अब परिणाम देता है scp: error: unexpected filename: . । यह परीक्षण करना सुनिश्चित करें कि क्या यह आपके वितरण के साथ काम करता है, साथी गोगलर :)
मोरिट्ज़ फ्रेडरिक

1

केवल छिपी हुई फ़ाइलों की प्रतिलिपि बनाने के लिए, इस आदेश का उपयोग करें

scp -rp /path_to_copy_hidden/.[!.]* user@host:/path_to_paste/

वास्तविक खेल वह /.[!.]*टैग है जो फाइलों के साथ शुरू होता है .(छिपा हुआ)


0

ऊपर दिए गए किसी भी scp समाधान ने मेरे लिए काम नहीं किया। हालाँकि, मैंने पाया कि निम्नलिखित ने cygwin: scp -r directory / * host: directory पर काम किया था, निर्देशिका '*' ने सभी दृश्यमान फाइलों का मिलान किया और अदृश्य को छोड़ दिया।


0

यदि दूरस्थ मशीन पर पासवर्ड लॉगिन अक्षम है, और लॉगिन करने का एकमात्र तरीका सार्वजनिक कुंजी है, तो आप इसका उपयोग कर सकते हैं:

$ rsync -av -s 'ssh -i /path/to/your/private/SSH/key' --progress user1@remote.host:/remote/source/directory/ /local/destination/directory/

यह छिपी हुई फाइलों को भी कॉपी करता है।

कृपया यह भी ध्यान दें कि "user1" के पास उन फ़ाइलों को पढ़ने की अनुमति होनी चाहिए, उदाहरण के लिए आप इस विधि के साथ अन्य उपयोगकर्ता के ssh फ़ोल्डर को कॉपी नहीं कर सकते।


0

जैसा कि scpनियमित अभिव्यक्ति का समर्थन करता है, यह आपके लिए अच्छी तरह से चाल चलेगा:

scp -rp src/(*|.*) user@server:dest/


0

वितरित पुनरीक्षण नियंत्रण छिपी हुई फ़ाइलों को संभालता है

CVE-2018-20685 भेद्यता के कारण, /.चाल के साथ अब उपयोग नहीं किया जा सकता हैscp । हालाँकि, वितरित संशोधन नियंत्रण जैसे gitया Hg Mecurial किसी भी अन्य फ़ाइलों की तरह छिपी हुई फ़ाइलों को संभाल लेगा। यहाँ मेरे पसंदीदा Hg Mercurial के लिए आदेश दिए गए हैं :

server:$ sudo apt install mercurial
client:$ sudo apt install mercurial
client:$ hg init src
client:$ cd src/
client:$ hg addr
client:$ hg com -m "first commit"
client:$ cd
client:$ hg clone src ssh://user@server/dest/

इसके बाद के बदलावों को फिर से प्रतिबद्ध करने client:$ hg com -m "commit message"और फिर client:$ hg pushकमांड का उपयोग करने की आवश्यकता होगी । इस Hg Mercurial धोखा पत्र से परिवर्तनों को आगे बढ़ाने के बारे में और जानें ।

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