Upload automático para o servidor FTP

2

Eu tenho dois usuários locais em um escritório que precisam digitalizar documentos e enviá-los automaticamente para o Terminal Server remoto. Eu posso configurar o software de escaneamento para salvar os arquivos em uma determinada pasta, mas eu gostaria de enviá-los automaticamente para o TS para que eles não tenham que sair da sessão para fazer o upload dos arquivos. O que é um bom observador de pastas para o xp que eu possa usar para carregar automaticamente esses arquivos?

O servidor é o Win 2000 e não tenho certeza de como isso geralmente é feito no Windows. Eu entendo que eu posso usar o WinSCP como um cliente de FTP scriptable, mas eu não sei o que a ferramenta é normalmente usada para assistir a uma pasta para alterações. A intuição diz Powershell, mas eu não sei. Meu Python não está à altura de snuff e não quero instalá-lo em seus computadores, mas isso pode ser uma última opção.

--- Isso é o que eu encontrei olhando ao redor .--- Este segmento oportuno de hoje mostra uma boa utilidade no Debian Linux (um hyperlink para novos usuários) / questions / 50127 / how-to-automatic-run-a-script-quando-o-conteúdo-de-um-diretório-muda -in-lin E esse segmento é o mais próximo que encontrei no serverFault, mas segue o caminho errado. Algum tipo de download automático de um site FTP?

(META ps Existe uma maneira de excluir tags. Há uma tag para 'uploads' que provavelmente deve ser 'upload'. Não há necessidade de plurais.)

    
por Radix 05.08.2009 / 04:42

3 respostas

5

Você pode usar o WinSCP para realizar esse tipo de upload automático. É normalmente usado com SFTP ou SCP mas também suporta FTP simples (seu servidor pode realmente ser capaz de SFTP ou SCP) e isso pode ser automatizado com seu script de automação:

Guia de automação do WinSCP

O comando específico que você está procurando é keepuptodate :

link

    
por 05.08.2009 / 05:27
1

O problema com keepuptodate é que ele executa toda a sincronização, que é lenta. Com um pouco de script, é possível fazer upload somente de arquivos alterados depois que eles são modificados.

Você pode usar FolderMon como um observador de pastas. Em seguida, processe sua saída pelo Gawk e, claro, use o WinSCP para fazer o upload. Todo o processo pode ser controlado por um script em lote simples:

Diretório local REM (recursivo).     REM% CD% - diretório de trabalho atual. Deve terminar com '\'.     defina "localPath =% CD% \"

REM Remote directory, must end with '/'
set "remotePath=/some/remote/directory"

REM Name of the stored session in WinSCP
set "[email protected]"

REM --------------------------------------------------------

REM Escape local path - replace '\' with '\'.
set "escapedLocalPath=%localPath:\=\%"

foldermon -lastwrite -subdirs %localPath% | ^
gawk -f autoupload.awk -v "localPath=%escapedLocalPath%" -v "remotePath=%remotePath%" -v "session=%session%" | ^
winscp.com /console | ^
gawk "{ if (!/#aaaaaaaaaaaaaaaaa/) print; }"

E é claro que você precisa desse script gawk ( autoupload.awk ):     INÍCIO {         # Variável para corrigir bug (recurso?) No foldermon.         # Quando o arquivo é salvo, o foldermon informa duas alterações no mesmo segundo.         lastLocalFile=""         lastTime=""

    # Init and connect
    print "#remotePath=", remotePath
    print "#localPath=", localPath
    print "#session=", session

    print "option batch abort"
    print "option confirm off"
    print "open " session
    print "option transfer binary"
    #print "cd " remotePath

    # Flush AWK buffer.
    for (i=0; i<41; i++)
        print "#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}

{
    if (match ($0, /^([:0-9]*) File modified: (.*)$/, matchRow)) {
        # File changed.

        time = matchRow[1]
        file = matchRow[2]
        localFile = localPath file

        # Don't upload same file twice immediately.
        if (localFile!=lastLocalFile || lastTime!=time) {
            lastLocalFile = localFile
            lastTime = time

            # Extract subdirectory from change report and convert '\' to '/'.
            match (file, /^((.*[\])*).*$/, matchPath);
            path = matchPath[1]
            gsub(/\/, "/", path)

            # Change remote dir and upload.
            #print "cd " remotePath path
            print "put", localFile, remotePath path

            # Flush AWK buffer.
            for (i=0; i<41; i++)
                print "#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
        }
    }
}

END {
    # Disconnect.
    print "close"
    print "exit"
}

Você pode baixar o arquivo zip com tudo incluído em aqui .

    
por 26.02.2013 / 09:31
0

Eu estava tendo alguns problemas com o script de upload automático fornecido pelo Strix e tive que modificá-lo um pouco para trabalhar com o Sublime Text 3 (não tenho certeza se o Sublime Text 2 funcionará da mesma maneira).

Se você estava tendo problemas com o script dele não funcionando ou carregando espaços em branco (e, portanto, TUDO), substitua a função do meio de autoupload.awk por essa versão modificada:

  {
    if (match ($0, /^([:0-9]*) File modified: (.*)$/, matchRow)) {
      # File changed.

        time = matchRow[1]
        file = matchRow[2]

      # Sublime Text 2/3 creates several files and appends some temporary characters after the original file name like this: myfile~RF34be688.TMP.
      # The original version of this program didn't handle this correctly and uploaded everything to the server
      # until you killed the script
      # This if statement below handles this by matching for only the lines that have the ~ (tilde chracter)

      if ( match (file,/~/) ) {

          tildePOS = match (matchRow[2],/~/)
          file = substr(matchRow[2], 1, tildePOS - 1)

          localFile = localPath file

          # Don't upload same file twice immediately.

          if (localFile!=lastLocalFile || lastTime!=time) {
            lastLocalFile = localFile
            lastTime = time

            # Extract subdirectory from change report and convert '\' to '/'.
            match (file, /^((.*[\])*).*$/, matchPath);
            path = matchPath[1]
            gsub(/\/, "/", path)

            # Change remote dir and upload.
            #print "cd " remotePath path
            print "put", localFile, remotePath path

            # Flush AWK buffer.
            for (i=0; i<41; i++)
              print "#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
          }
      }
    }
  }

Espero que isso ajude alguém!

    
por 28.02.2015 / 08:02