কপি ডিরেক্টরিগুলি পুনরাবৃত্তি স্ক্রিপ করতে পারেন?


572

বর্তমানে আমি কেবল একটি একক .tarফাইল অনুলিপি করতে পারি । তবে আমি কীভাবে ডিরেক্টরিগুলি পুনরাবৃত্তির সাথে অনুলিপি করতে পারি scp?

উত্তর:


935

হ্যাঁ, ব্যবহার করুন -r:

scp -rp sourcedirectory user@dest:/path
  • -আর অর্থ পুনরাবৃত্তি
  • -p আসল ফাইল থেকে পরিবর্তনের সময়, অ্যাক্সেসের সময় এবং মোডগুলি সংরক্ষণ করে।

দ্রষ্টব্য: এটি ফাইলটি sourcedirectoryভিতরে থাকবে /pathএইভাবে এটি তৈরি করে/path/sourcedirectory


9
তবে মনে রাখবেন যে এটি প্রতিলিঙ্কগুলি সংরক্ষণ করবে না।
CpnCrunch

12
নোট -prকরুন (বিপরীত ক্রমের বিকল্পগুলি) ফোল্ডারগুলি অনুলিপি করবে না, বরং তাদের বিষয়বস্তু লক্ষ্য ডিরেক্টরিতে (স্পষ্টতই, বিকল্পগুলির ক্রমটি বিবেচনা করবে) bur
পিএমএস

171

পূর্ববর্তী উত্তরগুলি প্রযুক্তিগতভাবে সঠিক হলেও এর rsyncপরিবর্তে আপনার ব্যবহারের বিষয়টিও বিবেচনা করা উচিত । rsyncপ্রেরণ এবং প্রাপ্ত পক্ষের উপাত্তগুলিকে একটি পৃথক ব্যবস্থার সাথে তুলনা করে যাতে ইতিমধ্যে প্রেরিত ডেটা পুনরায় পাঠাতে হয় না।

আপনি যদি রিমোট মেশিনে একাধিকবার অনুলিপি করতে চলেছেন তবে ব্যবহার করুন rsync। প্রকৃতপক্ষে, rsyncপ্রতিবার ব্যবহার করা ভাল কারণ এতে ফাইলের অনুমতি এবং মালিকানা অনুলিপি করা এবং নির্দিষ্ট ফাইল বা ডিরেক্টরি বাদ দেওয়ার মতো বিষয়গুলির আরও নিয়ন্ত্রণ রয়েছে। সাধারণভাবে:

$ rsync -av /local/dir/ server:/remote/dir/

একটি স্থানীয় ডিরেক্টরি একটি দূরবর্তী ডিরেক্টরি সহ সিঙ্ক্রোনাইজ করবে। আপনি যদি এটি দ্বিতীয়বার চালনা করেন এবং স্থানীয় ডিরেক্টরিগুলির বিষয়বস্তুগুলি পরিবর্তিত হয় না, কোনও ডেটা স্থানান্তরিত হবে না - scpপ্রতিবার চালানো এবং অনুলিপি করার চেয়ে অনেক বেশি দক্ষ ।

এছাড়াও, rsyncআপনাকে খুব সহজেই বাধা স্থানান্তর থেকে পুনরুদ্ধার করতে দেয়, বিপরীতে scp

অবশেষে, rsyncডিফল্টরূপে আধুনিক সংস্করণগুলি ssh ওভারে রান করে, সুতরাং যদি scpইতিমধ্যে কাজ করা হয় তবে rsyncবেশিরভাগই একটি ড্রপ-ইন প্রতিস্থাপন হওয়া উচিত।


1
আমি সম্মত হন rsyncআরও দক্ষ। এটি বর্তমানে এটি করে না এমন একটি কাজ scpহ'ল দূরবর্তী হোস্টগুলির মধ্যে অনুলিপি করা (কমপক্ষে কোনও একটিতে আরএসসিএন ক্লায়েন্ট না চালিয়ে)।
সিড্রিক নাইট

1
-av: ভি ভার্বোজের জন্য, আর্কাইভের জন্য এবং এটি একটি শর্টকাট যা -আরলপ্টগোডির পুনরাবৃত্তিকে বোঝায়, অধিকারের মালিকের তারিখ এবং লিঙ্ক সংরক্ষণ করে। আপনি যদি কেবল পুনরাবৃত্ত ব্যবহার করতে চান-r
পিডিএম


10

পুনরাবৃত্তির অনুলিপি বিকল্প '-আর' (লোয়ার কেস)

scp -r

যা আমি নিয়মিত স্থানীয় পুনরাবৃত্তির অনুলিপি বিকল্প '-আর' (আপার কেস) দিয়ে বিভ্রান্ত করি

cp -R

1
আমি কেবল সিপি এবং এসসিপি-র মধ্যে পার্থক্যটি চিহ্নিত করতে চেয়েছিলাম কারণ আর-আর এক নয়। unix.stackexchange.com/questions/18712/…
তরুণ

6

সবচেয়ে ভাল উপায় হ'ল এসএসএইচ এর মাধ্যমে আরএসসিএনসি ব্যবহার করা

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

আমার পছন্দের বিকল্পগুলি হ'ল -পাভেভিশ - মুছে ফেলা:

  • -a: সংরক্ষণাগার মোডে (অনেকগুলি ডিফল্ট সাধারণ বিকল্পগুলি অন্তর্ভুক্ত রয়েছে, যার মধ্যে রয়েছে সিমলিংক সংরক্ষণ সহ)
  • -z: সংকুচিত
  • -v: verbose: ফাইল দেখান
  • -পি: প্রজেসকে ফাইলগুলি / বাকি ফাইলগুলি হিসাবে প্রদর্শন করুন
  • -e ssh: এসএসএস প্রোটোকলে আরএসসিএন করুন
  • - মুছে ফেলা: গন্তব্যস্থলে থাকা ফাইলগুলি মুছুন যা আর উত্সে নেই

rsyncআমি যে সমস্ত সংস্করণ ব্যবহার করেছি সেগুলি sshডিফল্টরূপে ব্যবহার করবে , সুতরাং -esshএটির প্রয়োজনের সম্ভাবনা নেই। এবং দূরবর্তী হোস্টের সাথে সংযোগ করতে ব্যবহৃত কমান্ডের পছন্দটি পুনরাবৃত্তভাবে অনুলিপি করার সাথে সম্পর্কিত নয়।
ক্যাস্পারড

4

পুনরাবৃত্তিযোগ্য অনুলিপি পতাকাটি সন্ধান করার পরে এবং এই পোস্টটির জন্য এটি সফলভাবে ব্যবহার করে, আমি কেবল একটি পরামর্শ পোস্ট করতে চাই।

যদি কেসটি হয় যে আপনি একটি ডিরেক্টরি অনুলিপি করছেন (পুনরাবৃত্তভাবে)। যদি ফাইলগুলি সংকুচিত করা হয় তবে আপনি স্থানান্তরটিতে সময় সাশ্রয় করতে পারেন

শেষ পর্যন্ত যা করেছি তা হ'ল:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

আশাকরি এটা সাহায্য করবে


ফাইল এক্সটেনশানটি হয় হওয়া উচিত .tar.gzবা .tgzযেহেতু ফাইলটি একটি জিজিপড টার সংরক্ষণাগার (যেহেতু -zপতাকা ব্যবহৃত হয়)।
অ্যান্থনিবেল

2

আপনি এই সাধারণ কমান্ডের সাহায্যে সংক্ষেপিত সংরক্ষণাগারে একটি ডিরেক্টরিকে পুনরাবৃত্তভাবে অনুলিপি করতে পারেন:

ssh -p 22 user@address-to-copy-from.com  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

উদাহরণস্বরূপ, বিষয়বস্তু কপি করার /var/logথেকে domain.comথেকে ~/logs.tgzআপনি চালাতে:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

আপনি পাইপ ব্যবহার করে লক্ষ্য সিস্টেমে ফাইলগুলিও বের করতে পারেন। এই কমান্ডের বিষয়বস্তু কপি হবে /var/logdomain.comথেকে ~/destination/logআপনার সিস্টেমে:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

ডিরেক্টরিটি আয়না করা হলেও আপনার সম্ভবত ব্যবহার করা উচিত rsync...


1

যদি আপনি ব্যবহারকারীর পাসওয়ার্ডটিকে ইন্টারেক্টিভভাবে ইনপুট করার পরিবর্তে প্যারামিটার হিসাবে পাস করতে পছন্দ করেন তবে আপনি sshpass( sudo apt-get install -y sshpass) ব্যবহার করতে পারেন ।

উদাহরণ:

sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder

0

যে কোনও সিস্টেমে ডিরেক্টরিগুলি অনুলিপি করার জন্য আপনি scp কমান্ড সহ -r বিকল্পটি ব্যবহার করতে পারেন। আপনার যদি অন্য কিছু প্রয়োজন হয় তবে scp কমান্ড টিউটোরিয়ালটি দেখুন । -r বিকল্পটি লিনাক্স কমান্ডের বেশিরভাগ ক্ষেত্রে পুনরাবৃত্ত অপারেশনকে বোঝায়।


সত্য হলেও, -rবিকল্পটি ইতিমধ্যে কয়েক বছর আগে প্রস্তাবিত হয়েছিল এবং এটি গ্রহণযোগ্য উত্তর।
রালফ্রেডল

-3

আর একটি (বারবার ব্যবহারের জন্য সম্ভবত আরও ভাল) বিকল্পটি হ'ল এনএফএস ব্যবহার করা - এনএফএস-কার্নেল-সার্ভার এবং কীভাবে এনএফএস শেয়ার সেটআপ করতে হয় তা পরীক্ষা করে দেখুন।


2
এটি সম্পূর্ণ আজেবাজে কথা। এমন অবিরাম কেস রয়েছে যেখানে আপনি ব্যবহার করবেন scpতবে এনএফএস কোনও বিকল্প নয়।
সোভেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.