ডিরেক্টরিগুলির নাম ফাঁক হলে কীভাবে এসএসএসের মাধ্যমে আরএসএনসি করবেন


71

আমি এক সার্ভার থেকে অন্য সার্ভারে আরএসএনসি চেষ্টা করছি। সার্ভারগুলির একই ডিরেক্টরি কাঠামো রয়েছে তবে রিমোটেস সার্ভারে যখন কোনও স্থান থাকে তখন দূরবর্তী অঞ্চলে পাথের নামটি সঠিকভাবে সনাক্ত করতে আমার সমস্যা হচ্ছে।

বিস্তারিত এখানে

স্থানীয় ডিরেক্টরি হয়

mnt/xlses/split/v2/name with space

রিমোট ডিরেক্টরিটি

mnt/xlses/split/v2/name with space

সর্বশেষ চেষ্টাটি আমি খুঁজে পেতে পারি এমন সব চেষ্টা করেছি

rsync --size-only -avzPe ssh  /mnt/xlses/split/v2/name\ with\ space/ root@myserver.com:/mnt/xlses/split/v2/"name with space"

যখন এটি প্রথম জিনিস চালায় এটি রিপোর্ট করে যে এটি একটি নতুন ডিরেক্টরি তৈরি করছে

আমি এটি বাধাই এবং দেখুন যে একটি নতুন ডিরেক্টরি আছে

mnt/xlses/split/v2/name

আমার সমস্ত ফাইল সেই ডিরেক্টরিতে রয়েছে

আমি তাদের আশা করি

mnt/xlses/split/v2/name with space

উত্তর:


8

চেষ্টা

rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space root@myserver.com:/mnt/xlses/split/v2/

/উত্স ডিরেক্টরি পথ থেকে আমি অনুসরণকারী স্ল্যাশটি বন্ধ করে দিয়েছি । এটি rsyncডিরেক্টরিটি এবং এর সমস্ত বিষয়বস্তু অনুলিপি করে rsyncদেবে যার অর্থ আপনার পরিবর্তে দূরবর্তী হোস্টে নামটি সঠিক হওয়া সম্পর্কে চিন্তিত হবে (যা এটি করবে)।


9
এটি আমার পক্ষে কাজ করে নি, তবে জনলাইটের উত্তর তা করেছে।
এডরিয়ান টিজসেলিং

এটি দূরবর্তী দিকের স্পেসগুলি কীভাবে মোকাবেলা করতে হবে তা ব্যাখ্যা করে না।
ckujau

এটি কাজ করে না, হিসাবে উল্লিখিত।
টিকটিকি 21

128

চেষ্টা

rsync --protect-args --size-only -avzPe ssh  "/mnt/xlses/split/v2/name with space/ "root@myserver.com:/mnt/xlses/split/v2/name with space"

থেকে man rsync:

-স, - প্রোটেক্ট-আরগস

এই বিকল্পটি সমস্ত ফাইলের নাম এবং সর্বাধিক বিকল্পগুলি রিমোট শ্যাসকে তাদের ব্যাখ্যার অনুমতি না দিয়ে দূরবর্তী rsync এ প্রেরণ করে। এর অর্থ হ'ল স্পেসগুলি নামগুলিতে বিভক্ত নয় এবং কোনও নন-ওয়াইল্ডকার্ড বিশেষ অক্ষর অনুবাদ করা হয়নি (যেমন ~, $,;, & ইত্যাদি)। ওয়াইল্ডকার্ডগুলি দূরবর্তী হোস্টে rsync দ্বারা প্রসারিত হয় (শেলটি না করে এর পরিবর্তে)। [...]


13
এটি ম্যাকের জন্য কাজ করে না।
ম্যাট আলেকজান্ডার 21

8
আপনি হোম-ব্রিউ ব্যবহার করে আরএসএনসি-র একটি সাম্প্রতিক সংস্করণ ইনস্টল করলে ম্যাকের সাথে কাজ করে।
এডরিয়ান টিজসেলিং

4
"- সুরক্ষা" এর জন্য man rsync( /s) চালনা করে এবং অনুসন্ধান করে এটি আপনার আরএসসিঙ্কের সংস্করণে রয়েছে কিনা দেখুন । হোমব্রিউ দিয়ে ইনস্টল করতে: brew install homebrew/dupes/rsyncযদি রান না পাওয়া যায় brew search rsync
মাইকিএলএল

12
নতুন সংস্করণ ইনস্টল করুন অপ্রয়োজনীয়, আপনি শুধু স্পেস অব্যাহতি এবং হোস্ট / ফাইলের নাম উদ্ধৃত - যেমনrsync -Pavuz 'you@host:~/file\ with\ spaces' ./
ocodo

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
জোশ এম

38

এটি ব্যাশে কাজ করে: ব্যাকস্ল্যাশ দিয়ে স্পেসগুলি এড়িয়ে চলুন এবং তারপরে কোটগুলি ব্যবহার করুন:

rsync -avuz me@some.server.com:"/media/Music/Heavy\ Metal/Witch\ Mountain/*" .

অথবা আপনার যদি ভেরিয়েবল $ রিমোট_পথের পথ থাকে তবে স্পেসটি প্রতিস্থাপনের মাধ্যমে এড়ানো যায়:

rsync -avuz me@some.server.com:"${remote_path// /\\ }" .

1
এটা আমার জন্য কাজ করেছে। একটি ম্যাক সার্ভারে কাজ করা থেকে আমাকে বাঁচিয়েছে।
জর্জ

1
এটি সঠিক উত্তর চিহ্নিত করা উচিত। মূলটি হ'ল আপনার ব্যাকস্ল্যাশ এবং কোট উভয়ই দরকার।
শ্রীধর সারনোবাত

4
ডাবল-পলায়ন একটি ব্যথা, -sবিকল্পটি আরএসইএনসি-র যে কোনও আধুনিক সংস্করণে কাজ করে এবং এই সমস্যাটি সমাধানের জন্য ডিজাইন করা হয়েছে
মার্ক কে কোয়ান

দ্রষ্টব্য : আপনি যদি কোনও দূরবর্তী সার্ভার থেকে কোনও স্থান দিয়ে লোকাল পাথের সাথে কোনও স্থানের সাথে অনুলিপি করছেন তবে আপনাকে কেবল দূরবর্তী পথে উদ্ধৃতি যুক্ত করতে হবে
লেনোহ

@ টেকার্নার সমাধান আমার পক্ষে কাজ করেছে। "আরএসসিএনসি" ম্যান পৃষ্ঠা অনুসারে বিকল্পটি হ'ল "--প্রোটেক্ট-আরগস" বা "-স" ব্যবহার করা - এটি আমার পক্ষেও কাজ করে।
কিশান পারেখ

14

উদ্ধৃতি দুটি জোড়া ব্যবহার করুন

সমস্ত ব্যাকস্ল্যাশগুলি নিয়ে বিরক্ত করবেন না, কেবল ডাবল কোটের ভিতরে একক উদ্ধৃতি ব্যবহার করুন :

ssh me@myserver.com:"'/home/me/test file'" .

আপনি বিপরীতটিও ব্যবহার করতে পারেন, যা একক উদ্ধৃতিতে ডাবল উদ্ধৃতি :

ssh me@myserver.com:'"/home/me/test file"' .

আরও তথ্য

সার্ভারের পাশে ওয়াইল্ডকার্ড

আপনি যদি *ক্লায়েন্টের চেয়ে সার্ভারে একটি ব্যাখ্যা করতে চান তবে *অবশ্যই দুটি জোড়ের উদ্ধৃতিগুলির মধ্যে একটির ভিতরে আসতে হবে। আমি এই পাল্টা স্বজ্ঞাত বলে মনে করি কারণ যৌক্তিকভাবে উদ্ধৃতিগুলির বহিরাগত জুটি ক্লায়েন্টের ব্যাখ্যার হাতছাড়া করে, অন্যদিকে উদ্ধৃতিগুলির অভ্যন্তরীণ জুটি সার্ভারের ব্যাখ্যার হাতছাড়া করে।

আরগগুলি রক্ষা করুন

--protect-argsসমাধানটির সাথে তুলনা করে সুবিধাটি হ'ল আসলে আপনার সীমাবদ্ধতা নেই --protect-args, তাই আপনি বিশেষ অক্ষর যেমন ~বা ব্যবহার করতে পারেন$ । সুতরাং আপনি লিখতে পারেন:

rsync host:'"$HOME/test file"' .

অথবা

rsync host:'~"/test file"' .

নোট করুন যে ~পরবর্তী উদাহরণে টিলড ( ) এর দ্বিগুণ উদ্ধৃতিগুলির বাইরে থাকা দরকার।

আপনি পুরো ব্যবহারকারীর @ হোস্টের চারপাশে উদ্ধৃতিগুলির একটি জোড়া রাখতে পারেন: ফাইল অংশ (যেমন ssh "me@myserver.com:'/home/me/test file'" .)


প্রকৃতপক্ষে আপনার হোস্টের অংশটি উদ্ধৃতিতে না রাখার আপনার পরামর্শটি আরও অন্তর্দৃষ্টিপূর্ণ তাই এটি পোস্টে এটি প্রথম লাইন তৈরি করার জন্য লোভনীয়।
শ্রীধর সারনোবাত

2
এই সমাধানটি উজ্জ্বল! Ssh ওভার rsync দিয়ে টিনে থাকায় এটি কাজ করেছিল।
আইকন

আপনি যখন এটির বিষয়ে চিন্তা করেন, 2 টি উদ্ধৃতি সম্পূর্ণ যুক্তিযুক্ত: উদ্ধৃতিগুলির বাইরের জোড়টি যাতে ক্লায়েন্টটি এটি অবিচ্ছিন্নভাবে আচরণ করে (যার বিষয়বস্তুগুলি সার্ভার ভার্ব্যাটিমের কাছে প্রেরণ করা হয়) এবং উদ্ধৃতিগুলির অভ্যন্তরীণ জোড়াটি সার্ভারের জন্য অবিচ্ছেদ্যতা স্বীকৃতি
শ্রীধর সারনোবাত

এই উত্তর আন্ডাররেটেড হয়।
ডার্পল

6

আমি বুঝতে পেরেছি এটি একটি পুরানো প্রশ্ন, তবে আমি ভেবেছিলাম বিদ্যমান জ্ঞানের বডিটিতে যুক্ত করব।

আমি rsyncস্থান এবং এই কাজগুলি সহ একাধিক ফোল্ডার ব্যবহার করেছি । আমার নীচে 1-10 থেকে ফোল্ডার নাম্বার রয়েছে:

  • The\ Folder1
  • The\ Folder2
  • The\ Folder3
  • ..
  • The\ Folder10

আপনি যে দুটি উদাহরণ ব্যবহার করতে চান rsyncতা স্থানীয় এবং দূরবর্তী।

  1. স্থানীয় - উদ্ধৃতিগুলির অভাব নোট করুন।

    rsync -avu /media/data/The\ Folder* .
    
  2. রিমোট - উদ্ধৃতি উপস্থিতি নোট করুন

    rsync -avu -e ssh you@domain.com:"/media/data/The\ Folder*" .
    

3

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

rsync --size-only -avzPe ssh  "/mnt/xlses/split/v2/name\ with\ space/" "root@myserver.com:/mnt/xlses/split/v2/name\ with\ space"

1

rsyncম্যানাপেজগুলি থেকে :

   If you need to transfer a filename  that  contains  whitespace,  you  can
   either  specify  the --protect-args (-s) option, or you'll need to escape
   the whitespace in a way that  the  remote  shell  will  understand.   For
   instance:

          rsync -av host:'file\ name\ with\ spaces' /dest

0

ভাল আমি নিজেই এই প্রশ্নের উত্তর দিতে যাচ্ছি যদিও অন্য কেউ এটির ব্যাখ্যা দেওয়ার চেয়ে আরও ভাল কাজ করতে পারে।

স্পষ্টতই গন্তব্য মেশিনে সেটআপটি কীভাবে আর্গুমেন্টগুলি পার্স করা হয় তা প্রভাবিত করে এবং আমাদের অবশ্যই এমন কিছু সেটআপ রাখতে হবে যা স্পেস থেকে বাঁচতে উদ্ধৃতি বা স্ল্যাশ ব্যবহার করা কঠিন করে তুলছে তবে আমরা ওয়াইল্ড কার্ড ব্যবহার করতে পারি তাই আমি এটি করেছি

rsync --size-only -avzPe ssh  /mnt/xlses/split/v2/name\ with\ space/ root@myserver.com:/mnt/xlses/split/v2/name*

এটি আমার জন্য কাজ করে কারণ কেবলমাত্র একটি ডিরেক্টরি আছে যা নামের সাথে শুরু হয় যদি আমার একাধিক ডিরেক্টরি থাকে তবে এটি কাজ করবে না।

শেষ পর্যন্ত আমার বুঝতে হবে কীভাবে রিমোট সার্ভারটি সেটআপ করতে হবে যাতে এটি পথের নামটিকে আরও দক্ষতার সাথে পার্স করতে পারে - আমি কখনই ডিরেক্টরি নামগুলিতে স্পেস ব্যবহার করি না তবে যে ব্যক্তি এটি সেট আপ করেছিল এবং কমপক্ষে আপাতত আমি আটকে আছি


আপনার প্রস্তাবটি কেবলমাত্র কাজ করে কারণ আপনি ইতিমধ্যে আপনার প্রথম (ব্যর্থ) প্রচেষ্টার সময় গন্তব্য ডিরেক্টরিটি তৈরি করেছেন। আরও সহজ উপায়ের জন্য আমার উত্তর দেখুন (এতে ব্যর্থ প্রথম চেষ্টায় নির্ভর না করার সুবিধাও রয়েছে :) :)
dg99

ঠিক আছে ডিরেক্টরি ইতিমধ্যে বিদ্যমান ছিল। আপনি আমার ব্যর্থ প্রয়াসে সঠিক নন এটি ডিরেক্টরি / ~ / নাম নয় / ~ / নামটি স্পেসের সাথে মুছে ফেলেছি / ~ / নাম তৈরি করে এবং বিভিন্ন বিকল্পের চেষ্টা করে চলেছি স্থান সহ ডিরেক্টরি / ~ / নাম ইতিমধ্যে বিদ্যমান ছিল আমি ফাইল যুক্ত করার চেষ্টা করছিলাম এটিতে
পাইএনইউবি

ওহ, আমি আপনাকে বলতে চাইছি কি।
dg99

হোস্ট / পাথের উদ্ধৃতি দেওয়ার পাশাপাশি স্থানগুলি থেকে বেরিয়ে যাওয়ার ক্ষেত্রে যদি কাজ করে।
ocodo

0

পরিস্থিতির উপর নির্ভর করে একটি দ্রুত বিকল্প হ'ল দূরবর্তী সিস্টেমে একটি সিমিলিংক তৈরি করা:

user@remote$ ln -s ~/name\ with\ space/ ~/name_with_space

তারপরে -Lপতাকাটি ব্যবহার করুন rsyncযাতে এটিতে ডিরেক্টরি সামগ্রী অনুসরণ করতে বলা হয়:

user@local$ rsync -avz -L user@remote:~/name_with_space/ ~/name\ with\ space

আমি চিন্তাভাবনাটি পছন্দ করি, এমন সময় আসে যখন সিমলিংকিং খারাপ নামকরণ বা অযথা জটিল জটিল শ্রেণিবিন্যাসের ঝামেলাটিকে বাইপাস করে।
শ্রীধর সারনোবাত


-1

এইভাবে চেষ্টা করুন:

find /path/ -exec rsync -A -X -av -r -s root@xxxx:/path/ {} \;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.