2013-05-23 28 views
43

Nhiều lần trong ngày, tôi có thể đang chạy thử nghiệm nơi tôi cần xem qua tệp nhật ký trên máy chủ từ xa. Tôi đã quen sử dụng thiết bị đầu cuối của mình để sftp vào máy chủ từ xa và kéo tệp nhật ký mong muốn xuống số /tmp trên máy cục bộ của tôi.Single Line sftp từ Terminal

Tôi đã xem xét các tùy chọn ngày hôm nay bằng cách sử dụng man sftp để tìm cách chạy các lệnh sau về cơ bản trong một dòng để không phải gõ lệnh, nhấn enter, gõ lệnh nhập vv

(những gì tôi làm bây giờ)

sftp [email protected] 
--mypassword at prompt 
lcd /tmp 
get /dir/dir/dir/dir/file 
quit 

tôi thấy khi nhìn qua man sftp một tham chiếu đến scp mà tôi đã không được sử dụng trước đó. Tôi cảm thấy nó có thể là những gì tôi đang tìm kiếm, nhưng tôi không thấy một cách để xác định nơi tôi muốn các tập tin sao chép an toàn để đi.

Ai đó có thể cung cấp cho tôi cách để lấy /dir/file từ máy chủ từ xa và tải xuống /tmp/file_plus-my-description?

Tôi đã hy vọng để có thể chạy một sftp hoặc scp lệnh tương tự như một bản sao regularUNIX như:

scp [email protected] /dir/file /tmp/file_plus-my-description 

Tôi đang sử dụng được xây dựng trong Terminal trong Mac OS X 10.8. Cảm ơn.

Trả lời

107

Cập nhật tháng 9 năm 2017 - tl; dr

Tải một tập tin từ một máy chủ FTP từ xa tới máy tính của bạn:

sftp [email protected]:remoteFileName localFileName 

Tải lên một tệp duy nhất từ ​​máy của bạn đến ar biểu hiện cảm xúc máy chủ ftp:

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

Original câu trả lời:

Ok, vì vậy tôi cảm thấy một chút ngớ ngẩn. Nhưng tôi đã tìm ra. Tôi gần như đã có nó ở phía trên với:

sftp [email protected] remoteFile localFile 

Các tài liệu chỉ được hiển thị trong các thiết bị đầu cuối là:

sftp [[email protected]]host[:file ...] 
sftp [[email protected]]host[:dir[/]] 

Tuy nhiên, tôi tình cờ gặp this site trong đó cho thấy sau đây theo tóm tắt:

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 [[[email protected]]host[:file [file]]] 
sftp [[[email protected]]host[:dir[/]]] 

Vì vậy, câu trả lời đơn giản là bạn chỉ cần thực hiện : sau người dùng và máy chủ của bạn, sau đó là tệp từ xa và tên tệp cục bộ. Vô cùng đơn giản!

dòng Độc thân, sftp sao chép tập tin từ xa:

sftp [email protected]:remoteFileName localFileName 
sftp [email protected]:/tmp/myLogFile.log /tmp/fileNameToUseLocally.log 

Cập nhật Feb 2016

Trong trường hợp bất cứ ai đang tìm kiếm các lệnh để làm ngược lại điều này và đẩy một tập tin từ bạn máy tính cục bộ đến một máy chủ từ xa trong một dòng lệnh sftp, người dùng @Thariama bên dưới đã đăng giải pháp để thực hiện điều đó. Hat tip cho họ cho mã thêm.

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

có cách nào để sao chép tệp trong một dòng không? – Thariama

+0

@Thariama Tôi không chắc chắn những gì bạn đang yêu cầu. Đoạn mã trên cho bạn thấy cách sao chép tệp từ máy chủ từ xa bằng cách sử dụng sftp vào máy cục bộ của bạn trong một dòng. 'sftp kyle @ kylesserver: /tmp/myLogFile.log/tmp/fileNameToUseLocally.log' – Kyle

+11

tôi đã hỏi cách khác xung quanh (sao chép vào máy chủ từ xa), nhưng tôi thấy nó bản thân mình: _sftp {user} @ {host}: { dir} <<< $ 'đặt {path to file}' _ – Thariama

1

sftp hỗ trợ tệp theo lô.

Từ trang người đàn ông:

-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*). 
+0

Vì đây là một quá trình tôi làm nhiều lần trong ngày cho các tập tin khác nhau ở những nơi khác nhau, nó sẽ được tốt đẹp để có thể chỉ cần ghi nhớ một lệnh tôi có thể gõ vào một dòng duy nhất trong thiết bị đầu cuối của tôi (mà luôn luôn là mở) và nhấn Enter. Sử dụng '--batch' sẽ yêu cầu tôi đặt các lệnh của tôi vào một tệp rồi chuyển vào tệp đó dưới dạng tham số. Tôi vẫn đang chơi với 'scp', tôi cảm thấy nó có thể chứa đựng giải pháp của tôi. – Kyle

+0

Có thể 'mong đợi' là những gì bạn đang tìm kiếm. http://www.linuxjournal.com/article/3065 – synthesizerpatel

4

Để UPLOAD một tệp, bạn sẽ cần tạo tập lệnh bash. Một cái gì đó như sau nên hoạt động trên OS X nếu bạn đã cài đặt sshpass.

Cách sử dụng:

sftpx <password> <[email protected]> <localfile> <remotefile> 

Đặt kịch bản này ở đâu đó trong đường dẫn của bạn và gọi nó là 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 
+0

Cảm ơn bạn đã trả lời, tuy nhiên, câu trả lời tôi biểu thị ở trên sẽ sử dụng lệnh dòng đơn với sftp để lấy tệp từ máy chủ từ xa và lưu tệp vào một vị trí cụ thể trên máy cục bộ của bạn. Tôi đã xác minh rằng nó sẽ hoạt động trên OS X chỉ với sftp. – Kyle

+2

Vâng, đó chắc chắn là câu trả lời tốt nhất để chuyển từ xa sang địa phương. Tuy nhiên tôi mặc dù tôi muốn thêm một giải pháp để làm ngược lại: địa phương đến từ xa. Chỉ trong trường hợp nó có ích cho bất cứ ai. Cảm ơn! – sstur