এক্সগার্স সহ স্কিপ করার জন্য প্যারামিটার সরবরাহ করুন


10

আমি যখন দৌড়ে যাই svn st | awk '{print $2}', তখন আমি পাই:

a.py
b.py
c.py

তারপরে আমি scpএই ফাইলগুলিকে একটি রিমোট সার্ভারে রাখতে চাই। আমি চেষ্টা করেছি:

svn st | awk '{print $2}' | xargs scp my_name@my_server:~/

কিন্তু এটি কাজ করে না। এটি করার জন্য সঠিক আদেশটি কী?

ধন্যবাদ!

উত্তর:


10

এটা চেষ্টা কর. 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


2
ধন্যবাদ টিম আমি অনেকটা svn st | awk '{print $2}' | xargs -J % scp % my_name@my_server:~/xargs
গুগল

এবং আপনার সমাধান কাজ করে! তবে একটি টাইপো আছে, তা -Izনয়-iz
mitnk

আপনি কোন ওএস ব্যবহার করছেন? আমি -izসোলারিসে ব্যবহার করি এবং এটি সর্বদা কার্যকর হয়। পয়েন্টারের জন্য ধন্যবাদ।
টিম কেনেডি

4
পসিক্স xargs রয়েছে -I। এআইএক্স (.1.১) ম্যান পৃষ্ঠাটি -iঅপ্রচলিত এবং -Iএটি ব্যবহার করা উচিত। সোলারিস 10 (এবং 9) উভয়ই -iএবং রয়েছে -I
মাদুর

1
আহ, আমার জ্ঞান অচল! আমি -iসোলারিস 2.5 থেকে ব্যবহার করছি । আমার বন্ধুরা, বৃদ্ধ হওয়া দুঃখের বিষয়। :)
টিম কেনেডি

4

এটি কাজ না করার কারণ 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:~/
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.