जवाबों:
इसे इस्तेमाल करे। xargs के हाल के संस्करणों के साथ काम करना चाहिए।
svn st | awk '{print $2}' | xargs -iz scp z my_name@my_server:
वैकल्पिक रूप से, आप फ़ाइलों को केवल लूप कर सकते हैं।
for file in $(svn st | awk '{print $2}'); do scp $file my_name@my_server: ; done
-Iz
नहीं है-iz
-iz
सोलारिस का उपयोग करता हूं , और यह हमेशा काम करता है। सूचक के लिए धन्यवाद।
-I
। AIX (6.1) मैन पेज कहता -i
है कि यह अप्रचलित है और -I
इसका उपयोग किया जाना चाहिए। सोलारिस 10 (और 9) में दोनों -i
और हैं -I
।
-i
Solaris 2.5 के बाद से उपयोग कर रहा हूं । बूढ़ा होना एक दुखद घटना है, मेरे दोस्त। :)
इसका कारण यह नहीं है कि आप xargs
चलाने के लिए कह रहे हैं
scp my_name@my_server:~/ a.py b.py c.py
तर्कों का क्रम वह नहीं है जो आप करना चाहते हैं। एक समाधान यह है कि कमांड लाइन पर गंतव्य के सामने आने के लिए फ़ाइल नामों को बाध्य किया जाए। इसके लिए GNU xargs (यानी Linux या Cygwin) की आवश्यकता होती है। जब हम इस पर होते हैं, तो हम यह -d '\n'
सुनिश्चित करने के लिए पास कर सकते हैं कि कोई भी फ़ाइल नाम जिसमें newlines नहीं है (बिना -d
, xargs को इसके इनपुट के कुछ अजीब उद्धरण की उम्मीद है) काम करेगा; यदि आप विशिष्ट सॉफ़्टवेयर स्रोत पेड़ों के साथ काम करते हैं, तो यह आवश्यक नहीं है, जिसमें फ़ाइल नाम बहुत ही कठिन हो जाते हैं।
svn st | awk '{print $2}' |
xargs -d\\n -I{} scp {} my_name@my_server:~/
इस पद्धति का एक नकारात्मक पहलू यह है कि scp
प्रत्येक फ़ाइल के लिए अलग से कहा जाता है। यदि आप बहुत सारी छोटी फ़ाइलों की नकल कर रहे हैं, तो यह एक महत्वपूर्ण अंतर बना सकता है, क्योंकि एसएसएच कनेक्शन स्थापित होने में थोड़ा समय लगता है। आप एसएसएच मास्टर कनेक्शन का उपयोग करके प्रति-कनेक्शन समय को बहुत कम कर सकते हैं (जो इस उत्तर के दायरे से बाहर है, मैनुअल देखें, विशेष रूप से ControlMaster
और ControlPath
विकल्प .ssh/config
)।
तर्कों को सही स्थान पर रखने के लिए मजबूर करने का एक तरीका मध्यवर्ती खोल से गुजरना है। यह एक सामान्य तकनीक है तर्कों का उपयोग करते समय xargs
या पुन: व्यवस्थित करने के लिए find … -exec
।
svn st | awk '{print $2}' |
xargs -d\\n sh -c 'scp "$@" "$0" my_name@my_server:~/
एक और संभावना के rsync
बजाय का उपयोग करने के लिए है scp
। आप rsync
मानक इनपुट पर फ़ाइल नामों की सूची पास कर सकते हैं । चूंकि rsync
पैटर्न की सूची और फ़ाइल नामों की सूची नहीं होने की उम्मीद है, इसके लिए यह आवश्यक है कि आपके फ़ाइल नामों में कोई वाइल्डकार्ड वर्ण न हों (विशेष रूप से, कोई नया अंक, नहीं \[*?
और कोई प्रारंभिक #
या नहीं ;
)।
svn st | awk '{print $2}' |
rsync -a --include-from=- --exclude='*' . my_name@my_server:~/
svn st | awk '{print $2}' | xargs -J % scp % my_name@my_server:~/
xargs