Sftp দিয়ে ডিরেক্টরিগুলি আপলোড করছেন?


97

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

যাইহোক, আমি চেষ্টা

sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"

আমি মনে করি শেষ ত্রুটি বার্তাটি সম্পূর্ণ নির্বোধ। সুতরাং ডিরেক্টরি উপস্থিত নেই? ডিরেক্টরি কেন তৈরি করবেন না?

Sftp সহ এই ইস্যুটির চারপাশে কি আছে, বা আমার কেবল স্কেপ ব্যবহার করা উচিত?

উত্তর:


68

সংশোধিত : আমি প্রাথমিকভাবে ভুল দাবি করেছিলাম যে ওপেনএসএসএইচ সমর্থন করে না put -r। এটি করে তবে এটি খুব অদ্ভুত উপায়ে করে। উত্স ডিরেক্টরি হিসাবে একই নামের সাথে গন্তব্য ডিরেক্টরিটি ইতিমধ্যে উপস্থিত হওয়ার প্রত্যাশা রয়েছে।

sftp> put -r source
 Uploading source/ to /home/myself/source
 Couldn't canonicalize: No such file or directory
 etc.
sftp> mkdir source
sftp> put -r source
 Uploading source/ to /home/myself/source
 Entering source/
 source/file1
 source/file2

বিশেষত আশ্চর্যের বিষয় হ'ল আপনি গন্তব্যের জন্য আলাদা নাম দিলে এটি এমনকি প্রযোজ্য:

sftp> put -r source dest
 Uploading source/ to /home/myself/dest
 Couldn't canonicalize: ...
sftp> mkdir dest
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Couldn't canonicalize: ...
sftp> mkdir dest/source
sftp> put -r source dest
 Uploading source/ to /home/myself/dest/source
 Entering source/
 source/file1
 source/file2

একটি ভাল-বাস্তবায়িত পুনরাবৃত্তির জন্য put, আপনি তার psftpপরিবর্তে পুটিটি কমান্ড লাইন সরঞ্জামটি ব্যবহার করতে পারেন । এটি putty-toolsডেবিয়ান (এবং সম্ভবত উবুন্টু) এর অধীনে প্যাকেজে রয়েছে।

অন্যথায়, আপনি জিইআইআই ব্যবহার করতে চাইলে ফাইলজিলা যা চান তা করবে।


এফওয়াইআই: ওপেনএসএসএইচ 5.4 থেকে sftpঅনুমতি দেয়put -r
টিনো

3
ধন্যবাদ - আমি আমার উত্তর সংশোধন করেছি। এটা সময় সম্পর্কে, হাহ? ;
পি

128

আমি জানি না কেন এসফটিপি এটি করে তবে আপনি কেবল তখনই অনুলিপি করতে পারবেন যদি গন্তব্য ডিরেক্টরিটি ইতিমধ্যে বিদ্যমান থাকে। সুতরাং এই ...

sftp> mkdir bin
sftp> put -r bin


22

rsyncপরিবর্তে আপনি ব্যবহার করতে আগ্রহী হতে পারে । তার জন্য আদেশ হবে

 rsync --delete --rsh=ssh -av bin/ remote-ip-or-fqdn:/home/earlz/blah/bin/

এটি সমস্ত কিছু অনুলিপি করে bin/এটিকে রিমোট সার্ভারে স্থাপন করবে /home/earlz/blah/bin/। একটি অতিরিক্ত সুবিধা হিসাবে, এটি প্রথমে দূরবর্তী পার্শ্বের ফাইলটি পরিবর্তন হয়নি কিনা তা পরীক্ষা করে দেখবে এবং যদি তা না হয় তবে এটি পুনরায় প্রেরণ করবে না। অতিরিক্তভাবে, আপনি একটি -z বিকল্প যুক্ত করতে পারেন এবং এটি এটি আপনার জন্য সংকোচিত হবে।


অসাধারণ সব! খুবই সোজা!
জিজ্ঞাসা করুন

3
দয়া করে নোট করুন যে sftpএটি একটি কমান্ড এবং প্রোটোকল । -প্রোটোকল rsyncসমর্থন করে না sftp
টিনো

9

lcd: আপনার স্থানীয় ফোল্ডার (সাবফোল্ডার সহ)

cd: আপনার দূরবর্তী ফোল্ডার

put -r .


আসলে, আমার মনে হয় এটা হল সবচেয়ে সঠিক উত্তর ... সেখানে রয়েছে আমার পুরো ফোল্ডারের নির্বাণ উদ্দেশ্যে
nopole

যখন স্থানীয় প্যারেন্ট ফোল্ডারে সিডি করতাম এবং নামটি দিয়ে ডিরেক্টরি রাখার চেষ্টা করতাম তখন sftp অভিযোগ করেছিল। তবে cdআমি যে ডিরেক্টরিটিতে আপলোড করতে চাইছিলাম তা তা করে। ধন্যবাদ!
করিমকোরুন

8

আমি কি জিপ না করে কিছুটা জটিল উত্তরের পরামর্শ দিতে পারি, তবে কি ট্যার সহ?

এখানে আমরা যাচ্ছি:

tar -cf - ./bin | ssh target.org " ( cd /home/earlz/blah ; tar -xf - ) "

এটি ডিরেক্টরিটি প্যাকেজ করবে ./bin সাথে (-cf: = ফাইল তৈরি করুন), ফাইলের নাম - (কিছুই নয়, stdout) এবং এটি ssh-কমান্ডের মাধ্যমে টার্গেট.org (যা আইপিও হতে পারে) দিয়ে পাইপ করবে যেখানে কমান্ড উদ্ধৃতিগুলিতে সঞ্চালিত হয়, যা: সিডি টু ব্লাহ, এবং টর-এক্সএফ (এক্সট্র্যাক্ট ফাইল) - কোনও নাম নেই, কেবল স্টিডিন।

এটি যেন আপনি বাড়িতে কোনও প্যাকেজ প্যাক করেন, পোস্টে নিয়ে আসুন, তারপরে কাজ করতে যান, যেখানে আপনি প্যাকেজটি আশা করেন এবং এটি খোলেন।

সম্ভবত আরও অনেক মার্জিত সমাধান রয়েছে যা কেবল এসএফটিপি ব্যবহার করে।


একটি পাইপ tarএকটি খুব ভাল সমাধান, তবে এটি sshলগইন সমর্থন প্রয়োজন ( sftpউপরে একটি পৃথক প্রোটোকল ssh)। tarঅন্যের মত, পূর্বনির্ধারিতভাবে , পুনরাবৃত্তভাবে চালিত হয়, সমস্ত বিশেষ ফাইল (FIFO, ব্লক / অক্ষর ডিভাইস ইত্যাদি) স্থানান্তর করে, উত্স থেকে লক্ষ্য সিস্টেমে ইউআইডি / জিআইডি ম্যাপিং অনুবাদ করার চেষ্টা করে এবং একটি চিরাচরিত শর্ট কমান্ডলাইন থাকে। (যদিও একটি ব্যতিক্রম: "ইউনিক্স ডোমেন সকেট" স্থানান্তরিত হয় না But তবে সেগুলি
টিনো

আমি এই পদ্ধতিটি ব্যবহার করি যখন আমার নোডগুলির মধ্যে সংকোচনের প্রয়োজন হয় তবে pvআপনি দীর্ঘ স্থানান্তরে গতি দেখার জন্য সরঞ্জামটিও ব্যবহার করতে পারেন
ফিলিপ আলক্যাসিবার


1

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

উদাহরণ স্বরূপ :

rsync -zrp /home/a/ user@remote.host.com:/home/b/  

-R বিকল্পটি পুনরাবৃত্তভাবে ফাইলগুলি অনুলিপি করার জন্য, -z স্থানান্তর চলাকালীন সংক্ষেপণ সক্ষম করে, এবং -পি অনুলিপি করার সময় ফাইলের অনুমতিগুলি (ফাইল তৈরি, সম্পাদনা ইত্যাদি) সংরক্ষণ করে, যা এমন কিছু যা স্কিপ এএফআইএকে না করে। আরও অনেক বিকল্প সম্ভব; যথারীতি ম্যান পেজগুলি পড়ুন।
কারোলোসের মূল উত্তর


0

Ssh সহ দূরবর্তী সার্ভারে লগইন করুন, আপনার বাক্সে ফিরে সংযোগ করতে sftp ব্যবহার করুন, তারপরে get -rদূরবর্তী সার্ভারে ডিরেক্টরি স্থানান্তর করতে কমান্ডটি ব্যবহার করুন । গেট কমান্ড আপনাকে ডিরেক্টরিটি ইতিমধ্যে তৈরি না করে পুনরাবৃত্তভাবে ডিরেক্টরি স্থানান্তর করতে দেয়।

ssh remote ip
sftp local ip 
get -r whichever-dir

0

এসএফটিপি মামলা:

আমার সেই কাঠামোটি আমার এফটিপি-তে অনুলিপি করা দরকার:

mainfolder --- folder --- subfolder
                  |           |
              file1.txt   file2.txt

এটি আমার সমস্যার সমাধান করেছে:

cd ./mainfolder
mkdir folder
put -r /from/source/folder/* /mainfolder/folder/
cd ./folder
mkdir subfolder
put -r /from/source/folder/subfolder/* /mainfolder/folder/subfolder/

0

আমি কেবল আর্চ লিনাক্স উইকি থেকে শিখেছি যে sshfs ব্যবহার করে sftp-share মাউন্ট করা সম্ভব। আমি ক্রুট এবং জেল সহ একটি এসএফটিপি-সার্ভার চালিয়ে যাচ্ছি এবং এসএসএফএস খুব ভালভাবে কাজ করে।

  1. মাউন্ট: sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
  2. আনমাউন্ট: fusermount -u <your/local/mount/directory>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.