Carregar pasta com cURL e FTP usando o arquivo em lote no Windows?

1

Estou tentando fazer o upload de uma pasta inteira, incluindo subpastas e arquivos para uma pasta no meu servidor, a partir de um arquivo em lotes do Windows (.bat).

Abaixo está o comando que eu tenho para a parte Upload ...

curl -T E:\Server\bootstrap3\_gh_pages\ -u USER:PASSWORD ftp://domain.com/bootstrap/

Este é o erro que recebo

curl: Can't open 'E:\Server\bootstrap3\_gh_pages\'!
curl: try 'curl --help' for more information

Se eu tentar fazer apenas 1 arquivo, ele funciona bem, eu preciso de alguma forma percorrer e fazer todas as pastas e arquivos, alguma ajuda, por favor?

Eu pesquisei no Google e experimentei alguns exemplos não muito bons, sem sorte para essa pergunta, ainda

    
por JasonDavis 02.05.2013 / 14:17

4 respostas

6

Você provavelmente já descobriu, mas pelo menos para os outros googlers como eu:

o problema é que o curl não percorre o diretório, não há opção para carregar o diretório inteiro e ele não suporta * -expansão. Então a solução que acabei com foi escrever um script .bat. Com a ajuda desta resposta link

@echo off 
set localdir=C:\something
set ftphost=your.ftp.host.com
set ftpuser=yourftpuser
set ftppass=yourftppassword
set ftpdir=target/directory/on/server

setlocal enableDelayedExpansion

for /F %%x in ('dir /B/D %localdir%') do (
  set FILENAME=%localdir%\%%x
  curl -T !FILENAME! ftp://%ftphost%/%ftpdir%/ --user %ftpuser%:%ftppass%
)
    
por 04.12.2014 / 22:29
1

Como o curl foi escrito para * nix (unix), pode haver problemas ao especificar comandos de trabalho no Prompt de Comando do Windows. Isso está relacionado principalmente ao processamento das marcas " (aspas duplas) e \ (barras invertidas).

Uma coisa simples que você pode tentar é:

  1. Anexe nomes de arquivos entre aspas duplas.
  2. Ignore as barras invertidas adicionando outra barra invertida antes de cada barra invertida desejada.

Então, assim:

curl -T "E:\Server\bootstrap3\_gh_pages\" -u USER:PASSWORD ftp://domain.com/bootstrap/

Você também pode tentar usar barras como essa, que pode funcionar:

curl -T "E:/Server/bootstrap3/_gh_pages/" -u USER:PASSWORD ftp://domain.com/bootstrap/


Outra coisa que você pode tentar é usar a opção de linha de comando -K (ou --config= ) para curl (algumas informações úteis podem ser encontradas aqui ).

Basicamente, você coloca todos os argumentos da linha de comando em um arquivo e usa -K file (ou --config=file ) para informar onde encontrar os argumentos. / p>

Então, você cria um arquivo (exemplo: test.txt) que tem cada opção de linha de comando em uma linha separada como esta:

-T "E:\Server\bootstrap3\_gh_pages\"
-u USER:PASSWORD
--url=ftp://domain.com/bootstrap/

Em seguida, execute o curl assim:

curl -K test.txt
  or
curl --config=test.txt


Se nada disso funcionar, pode ser necessário executar o comando curl a partir de uma janela do terminal Cygwin no Windows. Consulte esta página da Web para obter informações sobre o uso do curl com o Cygwin no Windows .

    
por 02.05.2013 / 17:49
1

Não é útil para o Windows, mas no Linux você pode combinar o curl e encontrar:

find /server/ -exec curl -T {} ftp://some-ftp-site/folder/ --user user:pass \;
    
por 23.01.2016 / 07:28
0

Assim como a solução Linux postada anteriormente, no Windows você faria:

forfiles / p C: \ uploads / c "curl.exe -C - # -T @path ftp: // algum -ftp-site / folder / @ file - usuário usuário: pass "

    
por 26.10.2016 / 22:34