Подтвердить что ты не робот

Одиночная линия sftp от терминала

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

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

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

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, похожую на обычную копию UNIX, например:

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

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

4b9b3361

Ответ 1

Обновление Sep 2017 - tl; dr

Загрузите один файл с удаленного ftp-сервера на ваш компьютер:

sftp [email protected]:remoteFileName localFileName

Загрузите один файл с компьютера на удаленный 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[/]]

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

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 copy:

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

Обновление февраль 2016

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

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

Ответ 2

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

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

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

Поместите этот script где-нибудь на ваш путь и назовите его 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

Ответ 3

sftp поддерживает пакетные файлы.

На странице man:

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