2013-05-23 4 views
43

Несколько раз в течение дня я могу запустить тест, где мне нужно просмотреть файл журнала на удаленном сервере. Я привык использовать мой терминал до sftp на удаленном сервере и вытащить нужный файл журнала до /tmp на моем локальном компьютере.Single Line sftp from Terminal

Я просматривал варианты сегодня, используя man sftp, пытаясь найти способ запускать следующие команды в основном в одной строке, так что мне не нужно вводить команду, нажмите enter, введите команду press входить и т.п.

(что я делаю сейчас)

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

я нашел, просматривая man sftp ссылку на scp, которые я не использовал раньше. Я чувствую, что это может быть то, что я ищу, но я не видел способа указать, где я хочу, чтобы файл с надежной копией пошел.

Может ли кто-нибудь предоставить мне способ получить /dir/file с удаленного сервера и загрузить его в /tmp/file_plus-my-description?

Я надеялся, чтобы иметь возможность запускать SFTP или Scp команду, подобную regularUNIX копию, как:

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

Я использую встроенный в Terminal в Mac OS X 10.8. Благодарю.

ответ

107

Update сентября 2017 - Tl; др

Скачать один файл с удаленного сервера FTP к вашей машине:

sftp [email protected]:remoteFileName localFileName 

Загрузить один файл с вашего устройства на ar переигрывать FTP-сервер:

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

Оригинальный ответ:

Хорошо, так что я чувствую себя немного глупо. Но я понял это. Я чуть было его на вершине с:

sftp [email protected] remoteFile localFile 

Единственная документация, предъявленная в терминале это:

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

Однако, я наткнулся на this site, который показывает следующее под синопсис:

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[/]]] 

Итак, простой ответ: вы просто делаете : после вашего пользователя и хоста, а затем удаленный файл и локальное имя файла. Невероятно просто!

Одна линия, SFTP скопировать удаленный файл:

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

Update Feb 2016

В случае, если кто ищет команду, чтобы сделать реверс это и толчок файл с локальный компьютер на удаленный сервер в одной строке sftp команда, пользователь @Thariama ниже разместил решение для этого. Хвост подскажет им дополнительный код.

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

Есть ли способ скопировать файл в одну строку? – Thariama

+0

@Thariama Я не уверен, что вы просите. В приведенном выше коде показано, как копировать файл с удаленного сервера с помощью sftp на локальный компьютер в одной строке. 'sftp kyle @ kylesserver: /tmp/myLogFile.log/tmp/fileNameToUseLocally.log' – Kyle

+11

Я просил другой способ (копировать на удаленный сервер), но я нашел его сам: _sftp {user} @ {host}: { dir} <<< $ 'put {путь к файлу}' _ – Thariama

1

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

Поскольку это процесс я несколько раз в день для разных файлов в разных местах, то было бы хорошо иметь возможность просто запомнить команду, которую я мог бы ввести в одну строку на моем терминале (которая всегда открыта) и нажать enter. Использование '--batch' потребовало бы, чтобы я поместил свои команды в файл, а затем передал в этот файл как параметр. Я все еще играю с 'scp', я чувствую, что это может содержать мое решение. – Kyle

+0

Возможно, «ожидание» - это то, что вы ищете. http://www.linuxjournal.com/article/3065 – synthesizerpatel

4

Чтобы ЗАКРЫТЬ один файл, вам нужно будет создать сценарий bash. Что-то вроде следующего должно работать на OS X, если у вас установлено sshpass.

Использование:

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

Put этот сценарий где-то на своем пути, и назвать его 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

Спасибо за ответ, однако ответ, который я обозначил выше, будет использовать команду single line с sftp для получения файла с удаленного сервера и сохранения файла в определенном месте на вашем локальном компьютере. Я проверил, что он будет работать на OS X только с sftp. – Kyle

+2

Да, это, безусловно, лучший ответ для перевода с удаленного на местный. Однако, хотя я бы добавил решение для противоположного: от местного к удаленному. На всякий случай это полезно для всех. Благодаря! – sstur