1

Я пытаюсь загрузить целую папку, включая ее подпапки и файлы, в папку на моем сервере из пакетного файла Windows (.bat).

Ниже приведена команда для загрузки части ...

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

Это ошибка, которую я получаю

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

Если я пытаюсь сделать только 1 файл, он работает нормально, мне нужно как-то перебрать и сделать все папки и файлы, любая помощь, пожалуйста?

Я гуглил и попробовал пару не очень хороших примеров, но пока мне не повезло с этим вопросом.

4 ответа4

6

Вы, наверное, уже поняли это, но, по крайней мере, для других гуглов, таких как я:

проблема в том, что curl не перебирает каталог, нет возможности загрузить весь каталог, и он не поддерживает * -expansion. Поэтому я решил написать сценарий .bat. С помощью этого ответа https://stackoverflow.com/a/9429985

@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%
)
1

Поскольку curl был написан для * nix (unix), могут быть проблемы с указанием рабочих команд из командной строки Windows. В основном это связано с обработкой меток " (двойные кавычки) и \ (обратной косой черты).

Простая вещь, которую вы можете попробовать это:

  1. Заключите имена файлов в двойные кавычки.
  2. Избегайте обратной косой черты, добавляя еще одну обратную косую черту перед каждой требуемой обратной косой чертой.

Ну вот так:

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

Вы также можете попробовать использовать прямую косую черту, как это, что может работать:

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


Другая вещь, которую вы можете попробовать, - это использовать параметр командной строки -K (или --config=) для curl (некоторую полезную информацию можно найти здесь).

По сути, вы помещаете все аргументы командной строки в файл и используете -K file (или --config=file), чтобы указать curl, где искать аргументы.

Итак, вы создаете файл (пример: test.txt), в котором каждая опция командной строки находится в отдельной строке, например:

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

Затем запустите curl следующим образом:

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



Если ничего из этого не работает, вам может потребоваться запустить команду curl из окна терминала Cygwin в Windows. См. Эту веб-страницу для получения информации об использовании curl с Cygwin в Windows.

1

Не полезно для Windows, но в Linux вы можете объединить curl и найти:

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

Как и решение Linux, опубликованное ранее, в Windows вы должны сделать:

forfiles /p C:\uploads /c "curl.exe -C - # -T @path ftp://some-ftp-site /folder /@ file - пользователь пользователя:pass"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .