Одиночная линия 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. Спасибо.
Ответы
Ответ 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*).