Scp ডিরেক্টরি না থাকলে এটি তৈরি করতে পারে?


88

আমি scpফাইলগুলি আপলোড করতে ব্যবহার করতে চাই তবে মাঝে মাঝে লক্ষ্য ডিরেক্টরি উপস্থিত নাও হতে পারে।

ফোল্ডারটি স্বয়ংক্রিয়ভাবে তৈরি করা সম্ভব? যদি তাই হয়, কিভাবে? যদি তা না হয় তবে আমি কোন বিকল্প উপায়ে চেষ্টা করতে পারি?

উত্তর:


71

এটি rsyncকরতে পারে এমন অনেকগুলি কাজগুলির মধ্যে একটি।

আপনি যদি rsyncবিগত বেশ কয়েক বছর ধরে প্রকাশিত সংস্করণ ব্যবহার করে থাকেন তবে ¹ এর বেসিক কমান্ড সিনট্যাক্সের অনুরূপ scp: ² ²

$ rsync -r local-dir remote-machine:path

এটি অনুলিপি মেশিনে অনুলিপি local-sourceএবং এর বিষয়বস্তুগুলিতে অনুলিপি করবে এবং যে $HOME/path/local-dirকোনও ডিরেক্টরি যা প্রয়োজন তা তৈরি করে ³

rsyncএখানে কিছু বিধিনিষেধ রয়েছে যা এটি আপনার বিশেষ পরিস্থিতিতে কাজ করবে কিনা তা প্রভাবিত করতে পারে। এটি অনুপস্থিত দূরবর্তী ডিরেক্টরিগুলির একাধিক স্তর তৈরি করবে না; এটি কেবল রিমোটে এক অনুপস্থিত স্তর তৈরি করবে। rsyncকমান্ডের আগে কিছু দিয়ে এর আগে আপনি সহজেই এটি পেতে পারেন :

$ ssh remote-host 'mkdir -p foo/bar/qux'

এটি $HOME/foo/bar/quxগাছ না থাকলে এটি তৈরি করবে create এটা তোলে অভিযোগ বা অন্য খারাপ কিছু করতে যদি না হবে না ইতিমধ্যেই বিদ্যমান।

rsyncকখনও কখনও অন্যান্য আশ্চর্যজনক আচরণ রয়েছে। মূলত, আপনি এটি অনুলিপি করার জন্য কী বোঝাতে চেয়েছিলেন তা নির্ধারণ করতে বলছেন এবং এর অনুমানগুলি আপনার অনুমানগুলির সাথে মেলে না। চেষ্টা করে দেখুন। যদি এটি আপনার প্রত্যাশা মতো আচরণ না করে এবং আপনি কেন দেখতে না পান তবে আপনার স্থানীয় এবং দূরবর্তী ডিরেক্টরি সেটআপগুলি সম্পর্কে আরও বিশদ পোস্ট করুন এবং আপনি যে আদেশটি চেষ্টা করেছিলেন তা দিয়ে দিন।


পাদটীকা :

  1. rsync২.6.০ (১ জানুয়ারী ২০০ 2004) এর আগে -e sshপতাকাটির এটির মতো আচরণ করা দরকার scpকারণ এটি অপ্রচলিত আরএসএইচ প্রোটোকলের কাছে ডিফল্ট হয়েছিল ।

  2. scpএবং rsyncকিছু পতাকা ভাগ করে নিন, তবে ওভারল্যাপের কেবল কিছুটা আছে।

  3. যখন ব্যবহার SSHট্রান্সফার প্রোটোকল হিসাবে, rsyncএকই অক্ষমতা ব্যবহার করে। সুতরাং, ঠিক যেমন scp, এটি ধরে নেবে ডিফল্টরূপে দূরবর্তী মেশিনে আপনার স্থানীয় ব্যবহারকারীর মতো একই নামের একজন ব্যবহারকারী আছে।


আমি ম্যাক ওএসএক্স ব্যবহার করছি, আমার কি স্থানীয় এবং দূরবর্তী উভয় পক্ষেই আরএসআইএনসি ইনস্টল করা দরকার?
এজামপ্লেয়ার

অনুসন্ধান করা rsyncডকুমেন্টেশন পৃষ্ঠা, লগইন করতে কীভাবে ssh-key ব্যবহার করবেন তা খুঁজে পেল না। আমি লগইন করতে ব্যবহারকারীর নাম / পাসওয়ার্ড ব্যবহার করতে চাই না
AGamePlayer

@ আউকিউরুইগুও: ম্যাক ওএস এক্স সহ জাহাজগুলি rsync। এবং হ্যাঁ, rsyncআপনারও যেমন দূরবর্তী দিকের দরকার ঠিক তেমন scp। এসএসএইচ কী হিসাবে, rsyncআসলে ডিফল্টের সাথে নীচে এসএসএইচ ব্যবহার করা হয় -e ssh, সুতরাং আপনার যদি কীগুলির সাথে ব্যবহারের জন্য সেট আপ করা থাকে তবে সেগুলিও scpসেগুলির জন্য কাজ করবে rsync
ওয়ারেন ইয়ং

1
@WarrenYoung -rকোনো পার্থক্য করে তোলে। আপনি যে দৃশ্যের বর্ণনা দিয়েছেন তা কেবল তখনই কাজ করে যদি আপনি কোনও ডিরেক্টরি অনুলিপি করছেন এবং যদি লক্ষ্য প্যারেন্ট ডিরেক্টরি উপস্থিত থাকে। সুতরাং, rsync foo/ u@h:~/গন্তব্যের ডিরেক্টরি তৈরি করবে fooকিন্তু rsync foo/ u@h:~/bar/গন্তব্যের ডিরেক্টরি নির্মাণ করা হবে না bar। এটি উপস্থিত bar/fooথাকলেই তৈরি হবে bar/। যে কোনও ক্ষেত্রে, ওপি ফাইলগুলি আপলোড করছে এবং এমন ক্ষেত্রেও যেখানে এটি কাজ করে, এটি কেবল সম্পূর্ণ ডিরেক্টরিতে কাজ করে।
টেরডন

1
হ্যাঁ, আমিও এটি নিয়ে খেলছি। মনে হচ্ছে কোনও ফাইলের নাম উল্লেখ করাও এটি ব্যর্থ করে দেয়। সুতরাং অস্তিত্ব না থাকলে rsync file host:/foo/fileব্যর্থ হয় তবে ডিরেক্টরি এবং এটিতে স্থান তৈরি করে । স্ট্রেঞ্জ। যাইহোক, আপনি একদম ঠিক আছেন এবং মূল দৃশ্য কাজ করে, আমি আমার ডাউনটাতে প্রত্যাহার করব। foo/rsync file host:/foo/file
টেরডন

35

আপনি যদি কোনও গ্রুপের ফাইল অনুলিপি করেন তবে সত্যই নয়। আপনি যদি কোনও ডিরেক্টরি এবং এর নীচে সমস্ত সামগ্রী অনুলিপি করছেন তবে হ্যাঁ। এই আদেশ দেওয়া:

$ scp -pr /source/directory user@host:the/target/directory

যদি directoryবিদ্যমান নেই ~/the/targetউপর host, এটা তৈরি করা হবে। তবে, ~the/targetযদি এটি বিদ্যমান না থাকে, আপনার সম্ভবত সমস্যা থাকতে পারে - আমি এই মামলার সঠিক ফলাফলটি মনে করি না, তবে scpব্যর্থ হওয়ার উদ্দেশ্যে প্রস্তুত থাকতে পারি ।


1
scp: /home/madmike/test_bin: No such file or directoryযত তাড়াতাড়ি লক্ষ্য ডিরেক্টরিটি আমার সেটআপটিতে এই ব্রেকগুলি মিস করছে। ক্লায়েন্টে সাইগউইন এবং সার্ভারে RHEL 6.9 ব্যবহার করছে। আপনার সেটআপ কি?
ম্যাডমাইক

16

আমি যতদূর জানি, scpনিজেই এটি করতে পারে না, না। তবে, আপনি কেবল sshলক্ষ্য মেশিনে গিয়ে ডিরেক্টরিটি তৈরি করতে পারেন এবং তারপরে অনুলিপি করতে পারেন। কিছুটা এইরকম:

ssh user@host "mkdir -p /target/path/" &&
    scp /path/to/source user@host:/target/path/

মনে রাখবেন যে আপনি যদি পুরো ডিরেক্টরিগুলি অনুলিপি করেন তবে উপরেরটি প্রয়োজন হয় না। উদাহরণস্বরূপ, ~/fooদূরবর্তী হোস্টে ডিরেক্টরিটি অনুলিপি করতে আপনি -r(পুনরাবৃত্ত) পতাকাটি ব্যবহার করতে পারেন :

scp ~/foo/ user@host:~/

~/fooএটি দূরবর্তী হোস্টে লক্ষ্য ডিরেক্টরি তৈরি করবে । তবে এটি প্যারেন্ট ডিরেক্টরি তৈরি করতে পারে না। scp ~/foo user@host:~/bar/fooলক্ষ্য ডিরেক্টরি barউপস্থিত না হলে ব্যর্থ হবে । যে কোনও ক্ষেত্রে, -rপতাকাটি যদি কোনও পৃথক ফাইল অনুলিপি করে থাকে তবে লক্ষ্য নির্দেশিকা তৈরি করতে সহায়তা করবে না।


3

হ্যা, তুমি পারো. Scp এর ম্যান পেজ অনুসারে:

মানুষ scp

.....

-r পুনরুক্তি করে সম্পূর্ণ ডিরেক্টরি কপি করুন। নোট করুন যে স্ক্যাপটি গাছের আক্রমণের সময় সিমো বলিক লিঙ্কগুলি অনুসরণ করে।

....


7
এটি লক্ষ্য পিতামূলক ডিরেক্টরি তৈরি করবে না। এটি কোনও ডিরেক্টরি কোনও বিদ্যমান অবস্থাতে অনুলিপি করতে পারে। সুতরাং, দূরবর্তী বিদ্যমান থাকলে scp -r foo/ u@h:~/barতা তৈরি করবে তবে তা না থাকলে ব্যর্থ হবে। bar/foobar/
টেরডন

1
এটি ব্যর্থ হবে না। এটি fooনতুন ডিরেক্টরিতে বিষয়বস্তু অনুলিপি করবে /bar। অবশ্যই নামটি পরিবর্তন করা হয়েছে যা ওপি যা চায় তা নাও হতে পারে। আপনি যা চান সেটি যদি গন্তব্য মেশিনে তৈরি একটি নতুন গাছের কাঠামো হয় তবে scpকাজটি করা হবে না, আপনি যা চান তা গাছের একটি নির্দিষ্ট শাখা থেকে গাছের কাঠামোর প্রতিলিপি করা হয় তবে সেই কাঠামোটি তৈরি হয়।
ইওমিসমো

6
হ্যাঁ, তবে এটি কেবল তখনই কাজ করে যদি আপনি ডিরেক্টরিগুলি অনুলিপি করছেন, ফাইলগুলি নয়। scp -r file host:~/bar/তৈরি করা হবে bar/
টেরডন

3

btrfsস্ন্যাপশটগুলি স্থানান্তর করার আগে আমি নিম্নলিখিত ফাংশনটি ব্যবহার করি ssh:

check_remote_dir() {
        printf "\ntesting remote directory: '$1' "

        if ssh -p $PORT $ROOT@$REMOTE "[ ! -d $1 ]"; then
                printf "\nCreating: $1 on $ROOT@$REMOTE\n"
                ssh -p $PORT $ROOT@$REMOTE "mkdir -p $1"
        else
                printf "[OK]\n"
        fi
}

আপনার স্ক্রিপ্টে কেবলমাত্র এর সাথে ফাংশনটি কল করুন:

check_remote_dir /my/remote/path


আমি প্রায় একই জিনিসটি করি তবে আমাকে পাসওয়ার্ডটি ম্যানুয়ালি টাইপ করতে হবে (সুরক্ষার কারণে), তাই আমি এটি কমপক্ষে দু'বার টাইপ করে শেষ করব ...
স্টেফান রেইচ

0

আপনি mkdir কমান্ডের সাহায্যে কমান্ডটি শৃঙ্খলাবদ্ধ করতে এবং তারপরে আপনার তৈরি ফোল্ডারের রেফারেন্স করতে পারেন:

mkdir ~/new-folder/ && scp -P 22 <remote/url>:~/new-folder/

3
(1) প্রশ্নটি "স্বয়ংক্রিয়ভাবে" বলে। এটি স্বয়ংক্রিয় বলে মনে হয় না। (২) এটি টেরডনের উত্তরে কেবল একটি তুচ্ছ পরিবর্তন বলে মনে হয় ।
জি-ম্যান

0

যখন কোনও এসএসএস উপলব্ধ না হয়ে কেবল স্ক্রিপ বা এসএফটিপিতে সীমাবদ্ধ থাকে (আরএসএস দ্বারা), আরএসসিএন দিয়ে ফাঁকা ডিরেক্টরি ট্রিটি অনুলিপি করে ফাইলগুলি অনুলিপি করে ডিরেক্টরি তৈরি করা সম্ভব।

Ssh-copy-id কাজ না করে এবং .ssh ডিরেক্টরি উপস্থিত না থাকায় আমি দূরবর্তী হোস্টে পাবলিক ssh কীটি এভাবে রাখি:

rsync -e 'ssh -p22' -av -f"+ */" -f"- *" ~/.ssh backup@1.2.3.4:~/
scp -P22 ~/.ssh/id_rsa.pub backup@1.2.3.4:~/.ssh/authorized_keys

যদি লক্ষ্য ফাইলের নাম একই থাকে তবে এই কমান্ডগুলি একটি আরএসসিএনকে একত্রিত করে মাঝখানে আরও একটি ফিল্টার অন্তর্ভুক্ত করা সম্ভব।

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