উত্তর:
এটা চেষ্টা কর. 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
। এআইএক্স (.1.১) ম্যান পৃষ্ঠাটি -i
অপ্রচলিত এবং -I
এটি ব্যবহার করা উচিত। সোলারিস 10 (এবং 9) উভয়ই -i
এবং রয়েছে -I
।
-i
সোলারিস 2.5 থেকে ব্যবহার করছি । আমার বন্ধুরা, বৃদ্ধ হওয়া দুঃখের বিষয়। :)
এটি কাজ না করার কারণ xargs
আপনি চালনা করতে বলছেন
scp my_name@my_server:~/ a.py b.py c.py
যুক্তিগুলির ক্রম আপনি যা করতে চান তার সাথে মিলে না। একটি সমাধান হ'ল ফাইলের নামগুলি কমান্ড লাইনে গন্তব্যের আগে উপস্থিত হতে বাধ্য করা। এটির জন্য জিএনইউ xargs প্রয়োজন (যেমন লিনাক্স বা সাইগউইন)। আমরা যখন এটিতে থাকি তখন আমরা -d '\n'
নিশ্চিত হয়ে যেতে পারি যে নিউলাইনগুলি না থাকা যে কোনও ফাইলের নাম কাজ করবে (ব্যতীত -d
, xargs এর ইনপুটটির কিছু অদ্ভুত উদ্ধৃতি আশা করে); আপনি যদি সাধারণ সফ্টওয়্যার উত্স গাছগুলির সাথে কাজ করেন তবে এটি প্রয়োজনীয় নয়, যেখানে ফাইলের নামগুলি খুব কৃত্রিম হতে থাকে।
svn st | awk '{print $2}' |
xargs -d\\n -I{} scp {} my_name@my_server:~/
এই পদ্ধতির একটি খারাপ দিকটি scp
হ'ল প্রতিটি ফাইলের জন্য আলাদাভাবে বলা হয় called আপনি যদি অনেকগুলি ছোট ফাইল অনুলিপি করেন তবে এটি একটি এসএসএইচ সংযোগ স্থাপন করতে কিছুটা সময় নেয়ামত তা উল্লেখযোগ্য পার্থক্য করতে পারে। আপনি ব্যাপকভাবে কোনো SSH মাস্টার সংযোগ (যে এই উত্তরটি পরিধি outstide, ম্যানুয়াল দেখতে, বিশেষ করে ব্যবহার করে প্রতি সংযোগ সময় খাটো করতে পারেন 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