私はウェブサイトを開発していて、FTP経由でサイト上のディレクトリにローカルファイルをアップロードするためのFTPアクセスを持っています。コマンドラインを使用して、この展開プロセスを可能な限り自動化したいと思います。
このタスクでFTP経由でローカルディレクトリをリモートディレクトリと同期するプロセスをさらに自動化するために使用できるWindowsコマンドラインユーティリティはありますか?
私はこのようなタスクを、これまでにないほどクールな素晴らしい製品を使用して正常に完了しました WinSCP 製品。サンプルバッチスクリプトも提供しました。これは、自動化のためにこのようなタスクをセットアップするのに役立ち、満足するのに役立つかなり完全で完全な回答を提供します。あなたの要望。
基本的にあなたは:
- WinSCP GUI内でFTP接続を定義します
- 定義されたFTP接続を保存し、関連するものを示す名前を付けます
スクリプトでFTP接続名を使用して、FTPコマンドの接続を開きます。バッチスクリプトセクションを参照してください。
以下のバッチスクリプトでは、これらの変数が正しい値で設定されていることを確認する必要があります:localdir
、remotedir
、winscplogin
、および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 [〜#〜]| 保存。
同期
構文
synchronize local|remote|both [ <local directory> [ <remote directory> ] ]
備考
最初のパラメータが
local
の場合、リモートディレクトリからの変更はローカルディレクトリに適用されます。最初のパラメータがremote
の場合、ローカルディレクトリからの変更がリモートディレクトリに適用されます。最初のパラメータがboth
の場合、ローカルディレクトリとリモートディレクトリの両方を変更できます。ディレクトリが指定されていない場合、現在の作業ディレクトリが同期されます。
注:コマンドの上書き確認は常にオフになっています。
スイッチ:
私は由緒ある無料の NcFTPクライアント をうまく使用しました。
使用例:
ncftpput -u user -p password ftp.server.com /server-folder file-path
単純なbash
ftp
スクリプトは、ファイルを介して転送できます。
#!/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
"