我正在尝试通过 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 个文件,它可以正常工作,我需要以某种方式循环执行所有文件夹和文件,有什么帮助吗?
我已经在 Google 上搜索过,并尝试了几个不太好的例子,但还没有解决这个确切问题。
答案1
问题是 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%
)
答案2
对于 Windows 没有用,但在 Linux 上你可以结合 curl 和 find:
find /server/ -exec curl -T {} ftp://some-ftp-site/folder/ --user user:pass \;
答案3
由于 curl 是为 *nix (unix) 编写的,因此在 Windows 命令提示符中指定工作命令可能会出现问题。这主要与处理"
(双引号)标记,以及\
(反斜杠)。
您可以尝试一个简单的方法:
- 将文件名括在双引号中。
- 通过在每个所需的反斜杠前添加另一个反斜杠来转义反斜杠。
因此,像这样:
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
如果上述方法均无效,您可能需要在 Windows 上从 Cygwin 终端窗口运行 curl 命令。请参阅此网页有关在 Windows 上将 curl 与 Cygwin 结合使用的信息。
答案4
与之前发布的 Linux 解决方案类似,在 Windows 中您可以执行以下操作:
forfiles /p C:\uploads /c "curl.exe -C -# -T @pathftp://某个 ftp 站点/文件夹/@文件--用户用户:密码”