リモートサーバー上の同じサブディレクトリにファイルをアップロードするためのシェルスクリプト
Web開発者にとって非常に一般的なタスクは、開発ボックスのサブディレクトリからリモートサーバの同じサブディレクトリに単一のファイルをアップロードすることです。残念ながら、これは常に両方のサーバーでディレクトリを切り替えることを含む面倒な手動のプロセスになり、そして多くの時間を浪費します。.
安全なファイルコピーのためにscpを使って、これを自動化するシェルスクリプトを書くことにしました。 (重要な注意:ftpは非常に安全ではありません。代わりにWinSCPを使用してください)
解決すべき主な問題は、私の開発マシンにインストールしたWordPressが私のサーバーにインストールしたものとは異なるベースディレクトリを持っていることです。私の開発マシンでは/ var / www、そして私のサーバーでは/ var / www / howtogeek / docs /のようなものです。このように、スクリプトの冒頭でそれらを変数に移動することにしました。
SSHSERVER = [email protected]
RDIR = / var / www / howtogeek / docs
LDIR = "\ / var \ / www"
スクリプト内のローカルディレクトリ(LDIR)では、パス内の各/の前に\が付きます。これは、スクリプトの後半でこれをsedコマンドに渡すことになるので、これらの値をエスケープする必要があるためです。私はこの周りに何か他の方法があると確信していますが、私はそれに気付いていません.
次に、自動SSHログインを設定します。これを行うには、まずssh keygenユーティリティを次のように実行する必要があります。
ssh-keygen -t rsa
その後、〜/ .ssh / id_rsa.pubファイルをリモートサーバーの〜/ .ssh / authorized_keysファイルにコピーする必要があります。 〜/ .sshディレクトリがすでにリモートサーバー上に作成されている場合(チェックしたいかもしれません)、このコマンドを実行してキーをコピーすることができます。
cat〜/ .ssh / id_rsa.pub | ssh user @ hostname 'cat >> .ssh / authorized_keys'
これで、自動SSHログインができました。これにより、パスワードなしでscpユーティリティを使用できるようになります。それでは、スクリプトで使用するscpコマンドを見てみましょう。
scp $ 1 $ SSHSERVER:$ RDIR'pwd | sed“ s / $ LDIR //” '/' echo $ 1 | sed 's /.*\/// "
$ 1は、アップロードしようとしているファイル名のスクリプトに渡すパラメータです。 $ SSHSERVERと$ RDIRは、user @ hostnameとその前のリモートパスを設定するためにスクリプトの最初に設定する変数です。.
pwd | sedで始まる最初のブロックは現在のディレクトリパスを取得し、リモートサーバーと一致しないパスの前の部分を取り除きますが、残りのパスは残します。たとえば、コマンドを実行したときに/ var / www / wp-content /にいた場合、sedブロックはLDIR変数に基づいて/ var / wwwを削除しますが、/ wp-content /の一部はそのままにします。.
2番目のブロックでは、スクリプトに渡されたファイル名から前のパス全体を確実に削除するので、ファイル名だけが取得されます。.
たとえば、スクリプトにup.shという名前を付けて、ファイルのローカルの/ var / www / wp-content / plugins /ディレクトリから実行したとします。
up.sh myplugin.php
これは、シェルによって次のように拡張されています。
scp myplugin.php [email protected]:/var/www/howtogeek/docs/wp-content/plugins/myplugin.php
記事に基づいて独自のスクリプトファイルを作成しようとする代わりに、私はあなたがダウンロードできるようにそれを提供しました。そうすれば、特殊文字が機能しなくても問題はありません。はい、私はスクリプトを使用して自分自身をアップロードしました。
geek-uploader.shをダウンロードしてください。
パスのどこかに置いて、好きな名前を付けてください。私の名前を「up」に変更したので、アップロードするには「up filename.txt」と入力します。また、それを開いて、スクリプトの最初にある変数を自分の環境に合うように変更してください。.
このスクリプトは* nixシェルとscpユーティリティを使って何でも動作するはずです。 Ubuntuを使用していますが、Solaris、OS X、またはCygwinがインストールされているWindowsでも動作します。.