Automatizando a sincronização de pastas FTP para upload via linha de comando [closed]

0

Estou desenvolvendo um site e tenho acesso ao FTP para fazer upload de arquivos locais para um diretório no site via FTP. Eu gostaria de automatizar o processo de implantação tanto quanto possível usando a linha de comando.

Existe um utilitário de linha de comando Windows que eu possa usar para ajudar a automatizar ainda mais o processo de sincronização de um diretório local com um diretório remoto via FTP com essa tarefa?

    
por sduplooy 10.08.2017 / 18:15

3 respostas

2

Automatize a sincronização de pastas FTP com o WinSCP

Eu concluí essas tarefas com sucesso usando o incrível e sempre tão legal produto WinSCP . Eu forneci a você um exemplo Batch Script também para ajudar a configurar essa tarefa para automação e, assim, fornecer uma resposta completa e completa para ajudar a satisfazer suas necessidades.

Essentially you will:

  1. Define the FTP connection within the WinSCP GUI
  2. Save the defined FTP connection and give it a name that indicates what it pertains
  3. Use the FTP connection name in the script to open the connection for the FTP commands—see the Batch Script section

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

Script em lote

No script em lote abaixo, você desejará ter certeza de que essas variáveis estão definidas com os valores corretos: localdir , remotedir , winscplogin e logfile , portanto, certifique-se de que eles estejam definidos para apontar para o correto pastas, o WinSCP definiu a conexão FTP e o arquivo de log - o restante deve funcionar apenas como está.

@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 Connection Configuration Note

You will probably want to tell the WinSCP defined FTP connection to NOT Remember the last directory used since the script will go to the folder explicitly.

You complete this by highlighting the defined FTP connection name within the WinSCP GUI and then select Edit | Advanced | Directories | uncheck the box next to Remember the last directory used | OK | Save.

enter image description here

enter image description here

enter image description here

synchronize

Syntax

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

Remarks

When the first parameter is local, changes from remote directory are applied to local directory. When the first parameter is remote, changes from the local directory are applied to the remote directory. When the first parameter is both, both local and remote directories can be modified.

When directories are not specified, current working directories are synchronized.

Note: Overwrite confirmations are always off for the command.

Switches:

enter image description here

source

Mais recursos

por 11.08.2017 / 04:45
1

Eu usei com sucesso o venerável e livre Cliente NcFTP .

Exemplo de uso:

ncftpput -u user -p password ftp.server.com /server-folder file-path
    
por 10.08.2017 / 18:18
0

Um simples script bash ftp pode ser transferido por um arquivo:

#!/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

Mais fácil do que escrever seu próprio script para fazer um loop por arquivos e pastas, use 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
"
    
por 11.08.2017 / 13:01