web-dev-qa-db-ja.com

コマンドライン経由でアップロードするためのFTPフォルダー同期の自動化

私はウェブサイトを開発していて、FTP経由でサイト上のディレクトリにローカルファイルをアップロードするためのFTPアクセスを持っています。コマンドラインを使用して、この展開プロセスを可能な限り自動化したいと思います。

このタスクでFTP経由でローカルディレクトリをリモートディレクトリと同期するプロセスをさらに自動化するために使用できるWindowsコマンドラインユーティリティはありますか?

1
sduplooy

WinSCPを使用してFTPフォルダーの同期を自動化する

私はこのようなタスクを、これまでにないほどクールな素晴らしい製品を使用して正常に完了しました WinSCP 製品。サンプルバッチスクリプトも提供しました。これは、自動化のためにこのようなタスクをセットアップするのに役立ち、満足するのに役立つかなり完全で完全な回答を提供します。あなたの要望。

基本的にあなたは:

  1. WinSCP GUI内でFTP接続を定義します
  2. 定義されたFTP接続を保存し、関連するものを示す名前を付けます
  3. スクリプトでFTP接続名を使用して、FTPコマンドの接続を開きます。バッチスクリプトセクションを参照してください。

    enter image description here
    enter image description here
    enter image description here


バッチスクリプト

以下のバッチスクリプトでは、これらの変数が正しい値で設定されていることを確認する必要があります:localdirremotedirwinscplogin、およびlogfileそれらが正しいフォルダー、WinSCPで定義されたFTP接続、およびログファイルを指すように設定されていることを確認してください。残りはそのまま機能するはずです。

@ECHO ON

:SetFileLogVariables
SET localdir=C:\dev\site123
SET remotedir="dev\site123"
SET logfile=C:\logs\FTP_dev_site123_sync.log

:SetPrgVariables
SET prgwinscp="C:\Program Files\WinSCP3\WinSCP.com"
SET winscplogin="DevSiteSync"
SET winscpfile=%temp%\~tmpWinSCPFTPSyncT_%~N0.txt
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"

:SetWinSCPSyncCommand
SET ftpcmd=synchronize remote "%localdir%\"

:ftpout
ECHO.                                                                   >> %logfile%
ECHO ***************************  FTP OUT  ***************************  >> %logfile%
ECHO Synchronizing files to %winscplogin% server  on %date% at %time%   >> %logfile%

ECHO option batch on          >> %winscpfile%
ECHO option confirm off       >> %winscpfile%
ECHO option transfer binary   >> %winscpfile%
ECHO open %winscplogin%       >> %winscpfile%
ECHO cd %remotedir%           >> %winscpfile%
ECHO %ftpcmd%                 >> %winscpfile%
ECHO close                    >> %winscpfile%
ECHO exit                     >> %winscpfile%

ECHO %winscpfile%                                >> %logfile%
TYPE %winscpfile%                                >> %logfile%
ECHO ------------------------------------------- >> %logfile%
%prgwinscp% /script=%winscpfile%                 >> %logfile%
ECHO ------------------------------------------- >> %logfile%
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
ECHO Transmission complete on %date% at %time%   >> %logfile%
EXIT

WinSCP接続構成に関する注意

スクリプトは明示的にフォルダーに移動するため、WinSCPで定義されたFTP接続にNOT最後に使用されたディレクトリを覚えておくように指示することをお勧めします。

これを完了するには、WinSCP GUI内で定義されたFTP接続名を強調表示してから、Edit| 詳細| ディレクトリ| 最後に使用したディレクトリを記憶する|の横のチェックボックスをオフにします。 [〜#〜] ok [〜#〜]| 保存

enter image description here

enter image description here

enter image description here


同期

構文

synchronize local|remote|both [ <local directory> [ <remote directory> ] ]

備考

最初のパラメータがlocalの場合、リモートディレクトリからの変更はローカルディレクトリに適用されます。最初のパラメータがremoteの場合、ローカルディレクトリからの変更がリモートディレクトリに適用されます。最初のパラメータがbothの場合、ローカルディレクトリとリモートディレクトリの両方を変更できます。

ディレクトリが指定されていない場合、現在の作業ディレクトリが同期されます。

注:コマンドの上書き確認は常にオフになっています。

スイッチ:

enter image description here

ソース


その他のリソース

3
Pimp Juice IT

私は由緒ある無料の NcFTPクライアント をうまく使用しました。

使用例:

ncftpput -u user -p password ftp.server.com /server-folder file-path
1
harrymc

単純なbashftpスクリプトは、ファイルを介して転送できます。

#!/bin/sh
Host='hostname'
USER='username'
PASSWD='password'
FILE='test.txt'

ftp $Host <<END_SCRIPT
USER $USER
PASS $PASSWD
passive
ls
cd test
put $FILE
quit
END_SCRIPT
exit 0

ファイルやフォルダーをループする独自のスクリプトを作成するよりも簡単に、lsftpを使用します。

#!/bin/bash
Host='hostname'
USER='username'
PASS='password'
TARGETFOLDER='/test'
SOURCEFOLDER='/mnt/c/test'

lftp -f "
set ssl:verify-certificate no
open $Host
user $USER $PASS
mirror --reverse --delete --verbose $SOURCEFOLDER $TARGETFOLDER
bye
"
0
simlev