টার্মিনাল থেকে একক লাইন sftp


91

সারা দিন কয়েকবার, আমি একটি পরীক্ষা চালিয়ে যাচ্ছি যেখানে আমাকে একটি রিমোট সার্ভারে লগ ফাইলের সন্ধান করতে হবে। আমি আমার টার্মিনালটি sftpরিমোট সার্ভারে ব্যবহার করতে অভ্যস্ত হয়েছি এবং পছন্দসই লগ ফাইলটি /tmpআমার স্থানীয় মেশিনে টেনে আনছি।

আমি man sftpনীচের কমান্ডগুলি মূলত একটি লাইনে চালানোর উপায়টি বের করার চেষ্টা করে আজ অপশনগুলি সন্ধান করছিলাম যাতে আমাকে কমান্ড টাইপ করতে হবে না, এন্টার টিপুন, একটি কমান্ড প্রেস লিখুন ইত্যাদি।

(আমি এখন কি করব)

sftp myuser@myserver
--mypassword at prompt
lcd /tmp
get /dir/dir/dir/dir/file
quit

আমি এমন man sftpএকটি রেফারেন্স সন্ধানের সময় খুঁজে পেয়েছি scpযা আমি আগে ব্যবহার করি নি। আমি মনে করি এটি আমি যা খুঁজছি তা হতে পারে তবে আমি নিরাপদে অনুলিপি করা ফাইলটি কোথায় যেতে চেয়েছি তা নির্দিষ্ট করার কোনও উপায় আমি দেখিনি।

কেউ কি আমাকে /dir/fileএকটি রিমোট সার্ভার থেকে পাওয়ার উপায় সরবরাহ করতে এবং এটিতে ডাউনলোড করতে পারেন /tmp/file_plus-my-description?

আমি নিয়মিত ইউনিক্স অনুলির মতো একটি এসফটিপি বা এসসিপি কমান্ড চালাতে সক্ষম হবেন আশা করি:

scp myuser@myserver /dir/file /tmp/file_plus-my-description

আমি Terminalম্যাক ওএস এক্স 10.8 এ অন্তর্নির্মিতটি ব্যবহার করছি । ধন্যবাদ

উত্তর:


201

আপডেট সেপ্টেম্বর 2017 - টিএল; ডা

রিমোট এফটিপি সার্ভার থেকে আপনার মেশিনে একটি ফাইল ডাউনলোড করুন :

sftp {user}@{host}:{remoteFileName} {localFileName}

আপনার মেশিন থেকে একটি রিমোট এফটিপি সার্ভারে একটি ফাইল আপলোড করুন :

sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'

আসল উত্তর:

ঠিক আছে, তাই আমি কিছুটা বোবা অনুভব করছি। তবে আমি এটি বের করেছিলাম। আমার এটি প্রায় শীর্ষে ছিল:

sftp user@host remoteFile localFile

টার্মিনালে প্রদর্শিত কেবলমাত্র ডকুমেন্টেশন হ'ল:

sftp [user@]host[:file ...]
sftp [user@]host[:dir[/]]

যাইহোক, আমি এই সাইটটি জুড়ে এসেছি যা সংক্ষিপ্তসারগুলির নীচে নিম্নলিখিতটি দেখায়:

sftp [-vC1 ] [-b batchfile ] [-o ssh_option ] [-s subsystem | sftp_server ] [-B buffer_size ] [-F ssh_config ] [-P sftp_server path ] [-R num_requests ] [-S program ] host 
sftp [[user@]host[:file [file]]] 
sftp [[user@]host[:dir[/]]]

সুতরাং সহজ উত্তরটি হ'ল আপনি কেবল :নিজের ব্যবহারকারী এবং হোস্টের পরে রিমোট ফাইল এবং স্থানীয় ফাইলের নাম ব্যবহার করে। অবিশ্বাস্যভাবে সহজ!

একক লাইন, sftp অনুলিপি ফাইল অনুলিপি:

sftp username@hostname:remoteFileName localFileName
sftp kyle@kylesserver:/tmp/myLogFile.log /tmp/fileNameToUseLocally.log

ফেব্রুয়ারী 2016 আপডেট করুন

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

sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}'

20
আমি অন্য উপায়ে জিজ্ঞাসা করছিলাম (রিমোট সার্ভারে অনুলিপি করুন), তবে আমি এটি নিজের কাছে পেয়েছি: sftp {ব্যবহারকারীর} @ {হোস্ট}:
ir

4
আমার ক্ষমা, ভুল বোঝাবুঝি ভবিষ্যতে কারওর পক্ষে সহায়তা করতে পারলে আমি উত্তরটি আপনার প্রতিক্রিয়াটি অনুলিপি করব। ধন্যবাদ @ থারিয়ামা
কাইল

4
আমাদের জন্য টিএল: ডিআর-টাইপস, এটি প্রথম হাইলাইট করা সারি :-) হিসাবে ভুল সমাধান পেয়ে কিছুটা বিভ্রান্ত করছে
14:51

4
@ কাইল, আরও ভাল!

4
আমি এটি উদ্ভট মনে করি যে sftp কোনও একক কমান্ডে কোনও ফাইল আপলোড করার বিকল্প অন্তর্ভুক্ত করে না। এটি সূক্ষ্মভাবে কাজ করে, তবে এ জাতীয় সাধারণ ক্রিয়াকলাপটি এটি খুব বেশি হ্যাকি। এটি এখনও কেবলমাত্র আমি খুঁজে পেতে পারি যা বাক্সের বাইরে কাজ করে, তাই ধন্যবাদ। :)
টেকিন

7

একটি একক ফাইল আপলোড করতে আপনার বাশ স্ক্রিপ্ট তৈরি করতে হবে। আপনি যদি sshpassইনস্টল করে থাকেন তবে নীচের মতো কিছু ওএস এক্সে কাজ করা উচিত ।

ব্যবহার:

sftpx <password> <user@hostname> <localfile> <remotefile>

এই স্ক্রিপ্টটিকে আপনার পথে কোথাও রাখুন এবং কল করুন sftpx:

#!/bin/bash

export RND=`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32`
export TMPDIR=/tmp/$RND
export FILENAME=$(basename "$4")
export DSTDIR=$(dirname "$4")

mkdir $TMPDIR
cp "$3" $TMPDIR/$FILENAME

export SSHPASS=$1
sshpass -e sftp -oBatchMode=no -b - $2 << !
   lcd $TMPDIR
   cd $DSTDIR
   put $FILENAME
   bye
!

rm $TMPDIR/$FILENAME
rmdir $TMPDIR

উত্তরের জন্য ধন্যবাদ, তবে, আমি উপরে উল্লিখিত উত্তরটি রিমোট সার্ভার থেকে একটি ফাইল পেতে এবং আপনার স্থানীয় মেশিনে একটি নির্দিষ্ট জায়গায় ফাইলটি সংরক্ষণ করতে sftp সহ একক লাইন কমান্ডটি ব্যবহার করবে। আমি যাচাই করেছি যে এটি কেবল এসএফপিপি সহ ওএস এক্সে কাজ করবে।
কাইল

4
হ্যাঁ, এটি অবশ্যই দূরবর্তী থেকে স্থানীয়তে স্থানান্তর করার সেরা উত্তর answer তবে আমি বিপরীতটি করার জন্য একটি সমাধান যুক্ত করব: স্থানীয় থেকে দূরবর্তী। এটি কেবল কারও পক্ষে সহায়ক। ধন্যবাদ!
স্টাস্টুর

3

sftp ব্যাচ ফাইলগুলিকে সমর্থন করে।

ম্যান পৃষ্ঠা থেকে:

-b batchfile

Batch mode reads a series of commands from an input batchfile instead of stdin.  
Since it lacks user interaction it should be used in conjunction with non-interactive
authentication.  A batchfile of `-' may be used to indicate standard input.  sftp 
will abort if any of the following commands fail: get, put, rename, ln, rm, mkdir, 
chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir.  Termination 
on error can be suppressed on a command by command basis by prefixing the command 
with a `-' character (for example, -rm /tmp/blah*).

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

সম্ভবত 'প্রত্যাশা' আপনি তখন যা খুঁজছেন তা। লিনাক্সজার্নাল
সিনথেসাইজারপ্যাটেল

3

অথবা echo 'put {path to file}' | sftp {user}@{host}:{dir}, যা ইউনিক্স এবং পাওয়ারশেল উভয় ক্ষেত্রেই কাজ করবে।


এই সিনট্যাক্সটি puttyftp (psftp) এর সাথেও কাজ করে। ভেবেছি আমি এখানেই শেষ করলাম তাই ভাগ করে নেব
9 গাই

1

পার্ল এবং সিস্টেমের () কলের মধ্যে থেকে এটি ব্যবহার করার সময় নীচের মতো একটি সামান্য পরিবর্তন আমার পক্ষে কাজ করেছিল:

sftp {user}@{host} <<< $'put {local_file_path} {remote_file_path}'

1

এসসিপি উত্তর

ওপি এসসিপি উল্লেখ করেছে, তাই এখানে।

অন্যরা যেমন উল্লেখ করেছে, এসএফটিপি একটি বিভ্রান্তিকর কারণ আপলোড সিনট্যাক্স ডাউনলোড সিনট্যাক্স থেকে সম্পূর্ণ পৃথক । এটি পায় সীমিতভাবে যদি আপনি একই ফর্ম ব্যবহার মনে রাখা সহজ:

echo 'put LOCALPATH REMOTEPATH' | sftp USER@HOST
echo 'get REMOTEPATH LOCALPATH' | sftp USER@HOST

বাস্তবে, এটি এখনও বিশৃঙ্খলা এবং এই কারণেই লোকেরা এখনও "পুরানো" কমান্ডগুলি যেমন এসসিপি ব্যবহার করে:

scp USER@HOST:REMOTEPATH LOCALPATH
scp LOCALPATH USER@HOST:REMOTEPATH

এসসিপি নিরাপদ তবে তারিখ। এটিতে কিছু বাগ রয়েছে যা কখনই ঠিক করা হবে না, সার্ভারের .bash_profileকোনও বার্তা প্রেরণ করা থাকলে ক্রাশ হবে । যাইহোক, ব্যবহারের ক্ষেত্রে, ডেভগুলি বছর আগে ছিল।

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