1日中数回、リモートサーバー上のログファイルを調べる必要があるテストを実行している場合があります。ターミナルを使用してリモートサーバーにsftp
し、目的のログファイルをローカルマシンの/tmp
にプルダウンすることに慣れてきました。
私はコマンドを入力し、Enterを押し、コマンドを入力する必要がないように、基本的に次のコマンドを1行で実行する方法を見つけようとして_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
にダウンロードする方法を誰かに教えてもらえますか?
私は、次のような通常のUNIXコピーと同様のsftpまたはscpコマンドを実行できることを望んでいました。
scp myuser@myserver /dir/file /tmp/file_plus-my-description
Mac OS X 10.8の組み込みTerminal
を使用しています。ありがとう。
2017年9月に更新-tl; dr
ダウンロード単一のファイルをリモートFTPサーバーからマシンに:
sftp {user}@{Host}:{remoteFileName} {localFileName}
Uploadマシンから単一のファイルをリモートFTPサーバーにアップロードします。
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年2月更新
誰もがこれを逆にするコマンドを探している場合と、Pushローカルコンピューターからリモートサーバーに1行でファイルをプッシュするsftp
コマンド、ユーザー以下の@Thariamaは、それを達成するためのソリューションを投稿しました。余分なコードについては、彼らに帽子のヒント。
sftp {user}@{Host}:{remote_dir} <<< $'put {local_file_path}'
単一のファイルをアップロードするには、bashスクリプトを作成する必要があります。 sshpass
がインストールされていれば、次のようなものがOS Xで動作するはずです。
使用法:
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はバッチファイルをサポートしています。
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*).