আমি scp এর ইনপুট তালিকার মধ্যে পাইপ আউটপুট পাইপ করতে চাই, কিভাবে?


10

আমি একজন আভিজাত্য লিনাক্স ব্যবহারকারী এবং আমি চেষ্টা করছি একটি কম্পিউটার থেকে অন্য কম্পিউটারে ফাইলগুলির একটি দীর্ঘ তালিকা প্রেরণ করার। যুক্তি তালিকা খুব দীর্ঘ, তাই আমি অনুসন্ধানটি ব্যবহার করছি। যদিও অভিব্যক্তিটি সেট আপ করতে আমার সমস্যা হচ্ছে। কেউ সাহায্য করতে পারেন?

এখানে আমি সাধারণত একটি সংক্ষিপ্ত যুক্তি তালিকার জন্য টাইপ করব।

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

এখানে আমি মনে করি এটি অনুসন্ধানের সাথে অনুবাদ করতে পারে।

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

আমি কি পাইপিং ব্যবহার করতে পারি? কোন পরামর্শ সাহায্য করবে। আগাম ধন্যবাদ.

উত্তর:


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

সাধারণত আমি সমস্ত ফাইল একসাথে একটি বিশাল অঙ্কুরের মধ্যে 'টার' করব এবং কেবল একবার 'scp' কল করব। এটার মতো কিছু:

tar czfv - file1 file2 dir1 dir2 | ssh phogan@computer/ tar xvzf - -C directory
  • যে কেউ চারপাশে খেলতে পারে --excolve = বা - অন্তর্ভুক্ত = টার এর পরামিতি।
  • আর একটি বিকল্প হবে rsync ব্যবহার করা ।

যদি ssh / scp এর সাথে পাসওয়ার্ড ব্যবহার করে থাকেন তবে সমাধানের সমাধানটি কি প্রতিটি ফাইলটিতে একটি পাসওয়ার্ড চাইবে না?
কোয়াকোট কোয়েক্সোট

আসুন কেবল ধরে নিই যে তিনি কীভাবে এসএস-কীগুলি ব্যবহার করবেন জানেন :) ১০০০ পাসওয়ার্ড প্রশ্ন সহ সমস্যাটিও তার-পদ্ধতির কারণ
আকির

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>

Encapsulate নিশ্চিত করুন findমধ্যবর্তী কমান্ড ব্যাকটিক ` এবং একক না কোট '


কোন scp সংস্করণ, কোন লিনাক্স এটি বিতরণ? উবুন্টু 14.04 এ উদাহরণস্বরূপ, এই বিকল্পটি নেই।
geekQ

2
হাই, পুরানো সংস্করণগুলি এটিকে সমর্থন করে, নতুন সংস্করণগুলি একটি সহজ কমান্ড সমর্থন করে:scp `find <path> -name <expression>` user@host:<path_where_to_copy>
কার্লোস রডরিগস

1
একাধিক ফাইলে কাজ করে না
আম্রুত

@ আমৃতা ব্যবহার করুন-r
স্লাইব্লোটি

@ স্লাইব্লটি 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

দ্রষ্টব্য, এই সমাধানটি কমান্ড লাইনে ফাইলের নামগুলি এড়ানো যায় যেখানে কমান্ড লাইন আর্গুমেন্ট হিসাবে তাদের ব্যাখ্যা করা যেতে পারে।

আরেকটি বিষয় লক্ষ্য রাখবেন ফাইল ফাইলগুলির মধ্যে শূন্যস্থান থাকতে পারে। এর অর্থ ব্যাশ লুপের জন্য ফাইলের নামের সাথে সমস্যা থাকতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.