जवाबों:
इसे इस्तेमाल करे। 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।
-iSolaris 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