मैं scp की इनपुट सूची में खोज के उत्पादन को कैसे करना चाहूंगा, कैसे?


10

मैं नौसिखिया लिनक्स उपयोगकर्ता हूं और मैं एक कंप्यूटर से दूसरे कंप्यूटर पर फ़ाइलों की एक लंबी सूची भेजने की कोशिश कर रहा हूं। तर्क सूची बहुत लंबी है, इसलिए मैं खोज का उपयोग कर रहा हूं। मुझे अभिव्यक्ति स्थापित करने में परेशानी हो रही है, हालांकि। क्या कोई मदद कर सकता है?

यहाँ वह है जो मैं सामान्य रूप से एक लघु तर्क सूची के लिए लिखूंगा।

scp ./* phogan@computer/directory...

यहां मुझे लगता है कि यह खोज में अनुवाद हो सकता है।

scp find . -name "*" phogan@computer/directory...

शायद मैं पाइपिंग का उपयोग कर सकता हूं? किसी भी सुझाव से मदद मिलेगी। अग्रिम में धन्यवाद।

जवाबों:


16
find . -name "*" -exec scp '{}' phogan@computer:/directory ';'

आम तौर पर मैं सभी फाइलों को एक साथ एक विशाल ब्लॉब में 'टार' करता हूं और 'एसटीपी' को केवल एक बार कॉल करता हूं। कुछ इस तरह:

tar czfv - file1 file2 dir1 dir2 | ssh phogan@computer/ tar xvzf - -C directory
  • एक --exclude = या --include = टार के मापदंडों के साथ चारों ओर खेल सकता है।
  • एक अन्य विकल्प rsync का उपयोग करना होगा ।

अगर ssh / scp के साथ पासवर्ड का उपयोग किया जाता है, तो क्या हर फाइल पर पासवर्ड पूछने के लिए समाधान नहीं मिलेगा?
क्विकोट

चलो मान लें कि वह ssh-keys का उपयोग करना जानता है :) 1000 पासवर्ड प्रश्नों के साथ समस्या भी टार-एप्रोच का कारण है
akira

15

आप इसे सिर्फ एक कमांड से कर सकते हैं scp

  • के नए संस्करणों के लिए scp:
scp `find <path> -name <expression>` user@host:<path_where_to_copy>
  • पुराने संस्करणों के लिए:
scp --exec=`find <path> -name <expression>` user@host:<path_where_to_copy>

Backticks केfind बीच कमांड को इनकैप्सुलेट करना सुनिश्चित करें ` और सिंगल कोट्स नहीं


कौन सा scp वर्जन, कौन सा लिनक्स इसे वितरित करता है? Ubuntu 14.04 में Eg scp के पास यह विकल्प नहीं है।
geekQ

2
नमस्ते, पुराने संस्करण इसका समर्थन करते हैं, नए संस्करण एक सरल आदेश का समर्थन करते हैं:scp `find <path> -name <expression>` user@host:<path_where_to_copy>
कार्लोस रॉड्रिक्स

1
कई फाइलों पर काम नहीं करता
अमृता

@ अमृता का उपयोग-r
slybloty

@slybloty scp -rएकल (निर्देशिका) प्रविष्टि पर पुनरावृत्ति के लिए है, न कि कई प्रविष्टियों (एकाधिक फ़ाइलों) के लिए।
एंड्रयू एफआर

2
for f in `find . -name "*"`;do scp $f phogan@computer/directory;done

हाँ, वह वैसे भी एक ही आदेश चाहता है
जॉन टी

उपयोगी है, इसका इस्तेमालgrep -l pattern *
तंज

उन में रिक्त स्थान के साथ फ़ाइलों पर काम करने के लिए प्रतीत नहीं होता है।
क्रिस्टोफ डे ट्रॉयर

1

मै सुझाव दूंगा

find . -print0 | tar --null --files-from=/dev/stdin -cf - | ssh phogan@computer tar -xf - -C /directory

ध्यान दें, कि यह समाधान कमांड लाइन पर फ़ाइल नाम रखने से बचता है जहां उन्हें कमांड लाइन तर्क के रूप में व्याख्या की जा सकती है।

देखने के लिए एक और बात यह है कि फ़ाइल नाम में स्थान हो सकते हैं। इसका मतलब यह है कि बैश में लूप के लिए फाइलनाम की सूची के साथ कठिनाइयां हो सकती हैं।

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