আরএসসিএনসি: সার্ভারে টার্গেট ডিরেক্টরি তৈরি করতে কীভাবে এটি কনফিগার করব?


144

আমি rsyncস্থানীয় কম্পিউটার থেকে সার্ভারে যেতে চাই । কোনও ডিরেক্টরি নেই যা বিদ্যমান নেই এবং আমি rsyncপ্রথমে সার্ভারে ডিরেক্টরিটি তৈরি করতে চাই ।

আমি এটা কিভাবে করবো?

উত্তর:


162

আপনার তৈরি করা শেষ পাতা ডিরেক্টরিটির চেয়ে বেশি যদি থাকে তবে আপনি ssh ... mkdir -pপ্রথমে একটি পৃথক চালনা করতে পারেন , বা এখানে বর্ণিত --rsync-pathকৌশলটি ব্যবহার করতে পারেন :

rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/

অথবা --relativeটনির পরামর্শ অনুযায়ী বিকল্পটি ব্যবহার করুন । সেক্ষেত্রে আপনি কেবলমাত্র গন্তব্যটির মূলটি নির্দিষ্ট করেছেন, যা অবশ্যই উপস্থিত থাকতে হবে এবং উত্সটির ডিরেক্টরি কাঠামো নয় যা তৈরি হবে:

rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/

এইভাবে, আপনি / pre_existing / dir / new / x / y / z / এর সাথে শেষ করবেন

এবং যদি আপনি "y / z /" তৈরি করতে চান তবে "নতুন / এক্স /" এর ভিতরে ./না --relativeথেকে আপনি যেখানে শুরু করতে চান তা যোগ করতে পারেন :

rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/

/ pre_existing / dir / y / z / তৈরি করবে।


2
আমি যে সার্ভারটি অ্যাক্সেস করছি তাতে নেই mkdirতাই আমি হ্যাক ব্যবহার করছি: --rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \এটি একটি অতিরিক্ত ফাইল তৈরি করে তবে আপনি পরে মুছে ফেলতে পারেন।
ফাবিয়ানো সোরিয়ানী

1
এটি নতুন আরএসসিএনসি প্রোটোকলগুলিতে কাজ করছে বলে মনে হচ্ছে না, && বা ব্যবহার করার সময় আমি অনুসরণ করার অনুরূপ একটি ত্রুটি পেয়েছি; scrs কমান্ডে --rsync- পাথ অবৈধ অক্ষর! এখানে: && / usr / bin / rsync
গীতেশ

@ গীতেশ আপনি কি পালানোর চেষ্টা করেছিলেন &&?
ফিলিপ আলভারেজ

@ ফিলিপএলভারেজ হ্যাঁ আমি করেছি, কিন্তু কাজ করে নি। আমি এখনই লিঙ্কটি সন্ধান করতে পারছি না, তবে কিছু ডকুমেন্টেশন বলেছে এটি স্থির হয়েছে, কারণ আমি বিশ্বাস করি এটি ব্যবহার করা যেতে পারে (এবং ছিল)।
গীতেশ

ধন্যবাদ, এটি কাজ করে। আমার ক্ষেত্রে আমি একটি রিমোট সার্ভারে একটি স্থানীয় বাশ স্ক্রিপ্ট চালিয়ে যাচ্ছিলাম এবং এর মধ্যে ssh mkdir কমান্ড চালাচ্ছিল যা চালানো হচ্ছে, তবে আরএসসিএন কমান্ড চালানোর আগে বাকী স্ক্রিপ্টটি মেরে ফেললাম। এটি স্ক্রিপ্টের বাকী অংশগুলি ইস্যু ছাড়াই চলতে দেয়।
jhndavid400

33

ধরে নিই যে আপনি আরএসইএনসি সংযোগ করতে ssh ব্যবহার করছেন, এর আগে ssh কমান্ডটি কী পাঠাতে হবে:

ssh user@server mkdir -p existingdir/newdir

যদি এটি ইতিমধ্যে বিদ্যমান থাকে তবে কিছুই ঘটে না


4
ইউএফকে-র অনুরোধটি সিনট্যাক্সের জন্য যা "এসএসইএনসি সার্ভারে [নিখোঁজ লক্ষ্য] ডিরেক্টরি তৈরি করতে [[ফাইলগুলিকে & & অনুলিপি করা]]] এর কারণ হিসাবে সৃষ্টি করবে। আপনার প্রতিক্রিয়াটি বৈধ যে এটি সার্ভারে অনুপস্থিত লক্ষ্য ডিরেক্টরি তৈরি করবে ... তবে এর সাথে নয় rsync, কোনও উত্তর নেই।
টমরোচে

যদি sshএটি সমর্থিত না হয় এবং দূরবর্তী প্রান্তে rsyncসংযুক্ত হয় তবে এটি কোনও বিকল্প নয় rsync daemon
ক্রিজিসটফ জাবোসস্কি

19

-R, --relativeবিকল্পটি এই চেষ্টা করতে হবে।

উদাহরণস্বরূপ: আপনি যদি /var/named/chrootরিমোট সার্ভারে একই ডিরেক্টরি কাঠামো ব্যাকআপ করতে এবং তৈরি করতে চান তবে -Rঠিক এটিই করবে।


12
আপনি /./উত্স পাথ ব্যবহার করে তৈরি করা পথের কেবলমাত্র অংশটি নির্দিষ্ট করতে পারেন । বিশদ জন্য ম্যান পৃষ্ঠা দেখুন।
Marki555

21
কেন আপভোট? উত্তরটি ভুল, rsyncলক্ষ্যযুক্ত ফোল্ডারগুলি উপস্থিত না থাকলে স্বয়ংক্রিয়ভাবে ডিরেক্টরিগুলি তৈরি করবে না। দীর্ঘশ্বাস.
zeekvfu

3
আমি পাঠকদের দৃ strongly়ভাবে ম্যানপেজটি পরীক্ষা করার পরামর্শ দিই --relative। এটি আপনি যা ভাবেন তা করতে পারে না।
ফিলোসটাইল

3
- সম্পর্কিতটি সার্ভারে আপনি যে প্রান্তটি সরবরাহ করেন তার শেষ পয়েন্টে ফাইলের পরিবর্তে পুরো পথটি আটকে দেয়। সাধারণত /tmp/foo/bar/file.c থেকে রিমোট: / tmp রিমোট উত্পাদন করে: / tmp/file.c তবে -আর দ্বারা এটি /tmp/foo/bar/file.c তৈরি করে আপনি যদি না এই বিকল্পটি ব্যবহার করবেন না আপনি কি করছেন তা জানুন, আপনি সত্যিই অগোছালো ডিরেক্টরি কাঠামো পাবেন।
করম্যাক মুলহাল

7
@ মার্কি 555 এর মন্তব্য সাফল্যের মূল চাবিকাঠি। --relativeএকত্রে /./সবচেয়ে newbies জন্য সন্ধান করা হবে। rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/লক্ষ্য ডেস্কটপে ডেস্কটপ এর বিষয়বস্তু অনুলিপি করা হবে। ব্যবহারকারী নামগুলিতে পার্থক্য কীভাবে এটি প্রভাবিত করতে পারে তা জানেন না।
ড্যানিয়েল এফ

15

এটি আমার পক্ষে কাজ করেছে:

 rsync /dev/null node:existing-dir/new-dir/

আমি এই বার্তাটি পাই:

skipping non-regular file "null"

তবে আমার চারপাশে ফাঁকা ডিরেক্টরি ফাঁকা থাকার বিষয়ে চিন্তা করতে হবে না।


উত্তর kdubs জন্য ধন্যবাদ। এটা দুর্দান্ত কাজ করেছে। সুতরাং, আমি যদি উত্স হিসাবে চিহ্নিত করছি ফোল্ডারের ভিতরে যে ফাইলগুলি আমি সিঙ্ক করছি সেগুলি রাখতে চাই, তবে আমার কেবল এটি নির্দিষ্ট করা দরকার, এবং এটি তৈরি হয়ে যায়। উদাহরণস্বরূপ: আরএসআইএনএইচ-ভিএফ / মাইস্ট / / অন্য ফোল্ডার / মাইয়েস্ট / তারপরে আমি আউটপুটটি "তৈরি ডিরেক্টরি / অন্য ফোল্ডার / মাইমেস্ট"
পেয়েছি

1
নতুন-ডির শেষে স্ল্যাশ ('/') ভুলে যাবেন না, তা না হলে এটি একটি ডিরেক্টরি ছাড়াই ফাইল তৈরি করবে।
tartaruga_casco_mole

4

আমি মনে করি না আপনি এটি একটি আরএসসিএন কমান্ড দিয়ে করতে পারবেন তবে আপনি অতিরিক্ত ডিরেক্টরিটি প্রথমে এর আগে 'প্রাক-তৈরি' করতে পারেন:

rsync --recursive emptydir/ destination/newdir

যেখানে 'ফাঁকাডির' স্থানীয় খালি ডিরেক্টরি (যা আপনাকে প্রথমে একটি অস্থায়ী ডিরেক্টরি হিসাবে তৈরি করতে হতে পারে)।

এটি কিছুটা হ্যাক, তবে এটি আমার পক্ষে কাজ করে।

চিয়ার্স

ক্রিস


অস্থায়ী ফোল্ডার ব্যবহার করার দরকার নেই। rsync /dev/null node:existing-dir/new-dir/উপরে পরামর্শ দেখুন ।
lucid_dreamer

3

এই উত্তরটি অন্যান্য উত্তরের বিট ব্যবহার করে তবে আশা করি পরিস্থিতি সম্পর্কে এটি কিছুটা পরিষ্কার হবে। আপনি কখনই সংশ্লেষ করছেন তা নির্দিষ্ট করেননি - একটি একক ডিরেক্টরি এন্ট্রি বা একাধিক ফাইল।

সুতরাং ধরে নেওয়া যাক আপনি একটি উত্স ডিরেক্টরি এন্ট্রি জুড়ে সরাচ্ছেন, এবং কেবল এতে থাকা ফাইলগুলিকে সরিয়ে নিচ্ছেন না।

ধরা যাক আপনার স্থানীয়ভাবে একটি ডিরেক্টরি আছে data/myappdata/এবং এটির নীচে আপনার কাছে একটি সাব-ডাইরেক্টরি রয়েছে। আপনার কাছে data/আপনার টার্গেট মেশিনে কিন্তু কোন data/myappdata/- এই সহজ যথেষ্ট:

rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata

এমনকি আপনি দূরবর্তী ডিরেক্টরিতে আলাদা নাম ব্যবহার করতে পারেন:

rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname

আপনি যদি কেবল কিছু ফাইল সরান এবং সেগুলি অন্তর্ভুক্ত ডিরেক্টরি এন্ট্রি না সরান তবে আপনি তা করতে পারেন:

rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/

এবং এটি myappdataআপনার ফাইলগুলিকে স্থাপনের জন্য দূরবর্তী মেশিনে আপনার জন্য ডিরেক্টরি তৈরি করবে Again আবার, data/দূরবর্তী মেশিনে ডিরেক্টরি উপস্থিত থাকতে হবে।

ঘটনাক্রমে, আমার -rvvপতাকাটির ব্যবহার দ্বিগুণ ভার্বোজের আউটপুট পেতে হয় তাই এটি কী করে তা ততই প্রয়োজনীয় পুনরাবৃত্ত আচরণের বিষয়ে স্পষ্ট।

আরএসসিএনসি ব্যবহার করার সময় আমি কী পাই তা কেবল আপনাকে তা দেখানোর জন্য (উবুন্টু ১২.০৪-তে 3.0.9)

$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine's password:
sending incremental file list
created directory /tmp/newdir
delta-transmission enabled
bar.txt
foo.txt
total: matches=0  hash_hits=0  false_alarms=0 data=0

আশা করি এটি কিছুটা সাফ হয়ে যায়।


এটি প্রত্যাশার মতো ঠিক কাজ করে না । আমি প্রথম কমান্ডটি চেষ্টা করেছিলাম rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdataতবে এটি লক্ষ্যবস্তুতে যা তৈরি হয়েছিল তা হ'ল / রিমোট / পাথ / টু / ডেটা / মায়াপডাটা / মায়াপডাটা /
হারলেগল্ফগুই

যদি আমি আপনার প্রথম কমান্ডটিতে কিছুটা পরিবর্তন করে এবং উত্স পথের পরে '/' স্ল্যাশ যোগ করি, তবে এটি কাজ করে ... এর মতো:rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
হারলেগলগুই

2

উদাহরণ:

থেকে: / XXXx/a/b/c/d/e/1.html

টু: ইউজার @ রিমোট: /প্রে_অস্তিত্ব / দির / বি / সি / ডি / ই/১১ এইচটিএমএল

rsync:

সিডি / এক্সএক্সএক্সএক্স / এ / এবং আরএসসিএন -উভিআর বি / সি / ডি / ই / ইউজার @ রিমোট: / প্রি-অস্তিত্ব / দির /

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