Curl实现Linux到Windows(FTP)的数据同步

简介:

我们今天主要介绍,如何使用Curl将linux的数据拷贝到Windows上,其实说到需求,其实有很多办法,比如scp、rsync及mount等工具或方法都可以实现Linux到Windows的数据同步,今天我们主要介绍Curl的数据同步方法,使用Curl的缺陷就是需要在Windows上启用FTP服务,然后配置目录等信息,对于其他的方法,我们会在后面的文章再做介绍,

我们首先在windows上需要启用FTP服务,服务器管理器---添加WEB服务器(IIS)

clip_image001[3]

在IIS角色服务中勾选启用FTP服务器等角色

clip_image002

clip_image003

安装完成

clip_image004

接下来打开IIS管理器;网站---添加FTP站点

clip_image005

配置FTP物理路劲

clip_image006

我们配置FTP站点的信息,比如地址及端口信息

clip_image007

我们创建一个ftpuser用户,主要用来传输文件的认证信息

clip_image008

然后配置身份认证方式,选择基本,然后指定用户或用户组都可以,配置权限读写

clip_image009

配置完成

clip_image010

我们通过浏览器访问FTP服务进行测试

clip_image011

我们在目录下创建一个测试文件

clip_image012

刷新FTP访问可以显示

clip_image013

我们也可以打开文件显示

clip_image014

接下来我们要测试将linux上的文件上传到ftp上

我们首先使用 首先需要在linux安装 curl服务

1
yum  install  -y curl

clip_image015

clip_image016

安装后,我们首先查看curl有哪些参数

1
curl --help

clip_image017

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
[root@DB1 ~] # curl --help
Usage: curl [options...] <url>
Options: (H) means HTTP /HTTPS  only, (F) means FTP only
--anyauth Pick  "any"  authentication method (H)
-a /--append  Append to target  file  when uploading (F /SFTP )
--basic Use HTTP Basic Authentication (H)
--cacert < file > CA certificate to verify peer against (SSL)
--capath <directory> CA directory to verify peer against (SSL)
-E /--cert  <cert[: passwd ]> Client certificate  file  and password (SSL)
--cert- type  < type > Certificate  file  type  (DER /PEM/ENG ) (SSL)
--ciphers <list> SSL ciphers to use (SSL)
--compressed Request compressed response (using deflate or  gzip )
-K /--config  < file > Specify  which  config  file  to  read
--connect-timeout <seconds> Maximum  time  allowed  for  connection
-C /--continue-at  <offset> Resumed transfer offset
-b /--cookie  <name=string /file > Cookie string or  file  to  read  cookies from (H)
-c /--cookie-jar  < file > Write cookies to this  file  after operation (H)
--create- dirs  Create necessary  local  directory hierarchy
--crlf Convert LF to CRLF  in  upload
--crlfile < file > Get a CRL list  in  PEM  format  from the given  file
-d /--data  <data> HTTP POST data (H)
--data-ascii <data> HTTP POST ASCII data (H)
--data-binary <data> HTTP POST binary data (H)
--data-urlencode <name=data /name @filename> HTTP POST data url encoded (H)
--delegation STRING GSS-API delegation permission
--digest Use HTTP Digest Authentication (H)
--disable-eprt Inhibit using EPRT or LPRT (F)
--disable-epsv Inhibit using EPSV (F)
-D /--dump-header  < file > Write the headers to this  file
--egd- file  < file > EGD socket path  for  random data (SSL)
--engine <eng> Crypto engine to use (SSL).  "--engine list"  for  list
-f /--fail  Fail silently (no output at all) on HTTP errors (H)
-F /--form  <name=content> Specify HTTP multipart POST data (H)
--form-string <name=string> Specify HTTP multipart POST data (H)
-- ftp -account <data> Account data to send when requested by server (F)
-- ftp -alternative-to-user <cmd> String to replace  "USER [name]"  (F)
-- ftp -create- dirs  Create the remote  dirs  if  not present (F)
-- ftp -method [multicwd /nocwd/singlecwd ] Control CWD usage (F)
-- ftp -pasv Use PASV /EPSV  instead of PORT (F)
-P /--ftp-port  <address> Use PORT with address instead of PASV (F)
-- ftp -skip-pasv-ip Skip the IP address  for  PASV (F)
-- ftp -ssl Try SSL /TLS  for  ftp  transfer (F)
-- ftp -ssl-ccc Send CCC after authenticating (F)
-- ftp -ssl-ccc-mode [active /passive ] Set CCC mode (F)
-- ftp -ssl-control Require SSL /TLS  for  ftp  login,  clear  for  transfer (F)
-- ftp -ssl-reqd Require SSL /TLS  for  ftp  transfer (F)
-G /--get  Send the -d data with a HTTP GET (H)
-g /--globoff  Disable URL sequences and ranges using {} and []
-H /--header  <line> Custom header to pass to server (H)
-I /--head  Show document info only
-h /--help  This help text
--hostpubmd5 <md5> Hex encoded MD5 string of the host public key. (SSH)
-0 /--http1 .0 Use HTTP 1.0 (H)
--ignore-content-length Ignore the HTTP Content-Length header
-i /--include  Include protocol headers  in  the output (H /F )
-k /--insecure  Allow connections to SSL sites without certs (H)
--interface <interface> Specify network interface /address  to use
-4 /--ipv4  Resolve name to IPv4 address
-6 /--ipv6  Resolve name to IPv6 address
-j /--junk-session-cookies  Ignore session cookies  read  from  file  (H)
--keepalive- time  <seconds> Interval between keepalive probes
--key <key> Private key  file  name (SSL /SSH )
--key- type  < type > Private key  file  type  (DER /PEM/ENG ) (SSL)
--krb <level> Enable Kerberos with specified security level (F)
--libcurl < file > Dump libcurl equivalent code of this  command  line
--limit-rate <rate> Limit transfer speed to this rate
-l /--list-only  List only names of an FTP directory (F)
-- local -port <num>[-num] Force use of these  local  port numbers
-L /--location  Follow Location: hints (H)
--location-trusted Follow Location: and send auth to other hosts (H)
-M /--manual  Display the full manual
--max-filesize <bytes> Maximum  file  size to download (H /F )
--max-redirs <num> Maximum number of redirects allowed (H)
-m /--max-time  <seconds> Maximum  time  allowed  for  the transfer
--negotiate Use HTTP Negotiate Authentication (H)
-n /--netrc  Must  read  .netrc  for  user name and password
--netrc-optional Use either .netrc or URL; overrides -n
-N /--no-buffer  Disable buffering of the output stream
--no-keepalive Disable keepalive use on the connection
--no-sessionid Disable SSL session-ID reusing (SSL)
--noproxy Comma-separated list of hosts  which  do  not use proxy
--ntlm Use HTTP NTLM authentication (H)
-o /--output  < file > Write output to < file > instead of stdout
--pass <pass> Pass phrase  for  the private key (SSL /SSH )
--post301 Do not switch to GET after following a 301 redirect (H)
--post302 Do not switch to GET after following a 302 redirect (H)
- #/--progress-bar Display transfer progress as a progress bar
-x /--proxy  <host[:port]> Use HTTP proxy on given port
--proxy-anyauth Pick  "any"  proxy authentication method (H)
--proxy-basic Use Basic authentication on the proxy (H)
--proxy-digest Use Digest authentication on the proxy (H)
--proxy-negotiate Use Negotiate authentication on the proxy (H)
--proxy-ntlm Use NTLM authentication on the proxy (H)
-U /--proxy-user  <user[:password]> Set proxy user and password
--proxy1.0 <host[:port]> Use HTTP /1 .0 proxy on given port
-p /--proxytunnel  Operate through a HTTP proxy tunnel (using CONNECT)
--pubkey <key> Public key  file  name (SSH)
-Q /--quote  <cmd> Send  command (s) to server before  file  transfer (F /SFTP )
--random- file  < file > File  for  reading random data from (SSL)
-r /--range  <range> Retrieve only the bytes within a range
--raw Pass HTTP  "raw" , without any transfer decoding (H)
-e /--referer  Referer URL (H)
-O /--remote-name  Write output to a  file  named as the remote  file
--remote-name-all Use the remote  file  name  for  all URLs
-R /--remote-time  Set the remote  file 's  time  on the  local  output
-X /--request  < command > Specify request  command  to use
--retry <num> Retry request <num>  times  if  transient problems occur
--retry-delay <seconds> When retrying, wait this many seconds between each
--retry-max- time  <seconds> Retry only within this period
-S /--show-error  Show error. With -s,  make  curl show errors when they occur
-s /--silent  Silent mode. Don't output anything
--socks4 <host[:port]> SOCKS4 proxy on given host + port
--socks4a <host[:port]> SOCKS4a proxy on given host + port
--socks5 <host[:port]> SOCKS5 proxy on given host + port
--socks5- hostname  <host[:port]> SOCKS5 proxy, pass host name to proxy
--socks5-gssapi-service <name> SOCKS5 proxy service name  for  gssapi
--socks5-gssapi-nec Compatibility with NEC SOCKS5 server
-Y /--speed-limit  Stop transfer  if  below speed-limit  for  'speed-time'  secs
-y /--speed-time  Time needed to trig speed-limit abort. Defaults to 30
-2 /--sslv2  Use SSLv2 (SSL)
-3 /--sslv3  Use SSLv3 (SSL)
--stderr < file > Where to redirect stderr. - means stdout
--tcp-nodelay Use the TCP_NODELAY option
-t /--telnet-option  <OPT=val> Set telnet option
-z /--time-cond  < time > Transfer based on a  time  condition
-1 /--tlsv1  Use => TLSv1 (SSL)
--tlsv1.0 Use TLSv1.0 (SSL)
--tlsv1.1 Use TLSv1.1 (SSL)
--tlsv1.2 Use TLSv1.2 (SSL)
--trace < file > Write a debug trace to the given  file
--trace-ascii < file > Like --trace but without the hex output
--trace- time  Add  time  stamps to trace /verbose  output
-T /--upload-file  < file > Transfer < file > to remote site
--url <URL> Set URL to work with
-B /--use-ascii  Use ASCII /text  transfer
-u /--user  <user[:password]> Set server user and password
-A /--user-agent  <string> User-Agent to send to server (H)
- v /--verbose  Make the operation  more  talkative
-V /--version  Show version number and quit
-w /--write-out  < format > What to output after completion
-q

翻译过来我们经常会使用一下上传

1
2
3
- #/--progress-bar 进度条显示当前的传送状态
-T /--upload-file  < file >                  上传文件
-O/—download  file                       下载文件

我们先使用curl命令列表ftp服务器上的目录列表

1
2
crul  ftp : //192 .168.6.188:8888/ --user ftpuser:ftpuserpassword
crul  ftp : //192 .168.6.188:8888/ -u ftpuser:ftpuserpassword

clip_image018

1
curl  ftp : //ftpuser :ftpuserpassword@192.168.6.188:8888


clip_image019

1
2
3
4
我们下载一个文件
curl  ftp : //192 .168.6.188:8888 /hello .txt -u ftpuser:ftpuserpwd2016 -o hello.txt
或者命令
curl -u ftpuser:ftppass -O  ftp : //192 .168.6.188:8888 /hello .txt

clip_image020

1
2
3
4
5
6
7
如果需要下载全部文件:
curl -u ftpuser:ftppass -Oftp: //192 .168.6.188:8888/
  
最后我们尝试上传一个文件
curl -u ftpuser:ftpuserpwd -T 1.txt  ftp : //192 .168.6.188:8888/
如果需要上传多个文件
curl -u ftpuser:ftppass -T  "{file1,file2}"  ftp : //192 .168.6.188:8888/

clip_image021

clip_image022

因为我们要定期自动上传,所以,我们需要将该命令编写成一个shell脚本;最简单的方法是

1
2
3
4
5
6
#!/bin/bash
user=”ftpuser”
pwd =”ftpuserpwd”
#curl -u ftpuser::ftpuserpwd -T 1.txt ftp://192.168.6.188:8888/
curl –u $user$ pwd -T 1.txt  ftp : //192 .168.6.188:8888/
exit

然后我们可以使用crontal -e进行编辑计划任务

1
2
30 23 * * *  shell路劲  每天23点30执行脚本
23 23 * * *   /root/uploadfile .sh



本文转自 高文龙 51CTO博客,原文链接:http://blog.51cto.com/gaowenlong/1856299,如需转载请自行联系原作者
相关文章
|
8天前
|
Linux Windows
Linux01---目录结构,Linux系统下只有一个最顶级的树/,Windows系统有盘符概念,而Linux系统没有盘符概念,整个系统都在/根目录下,Linux 系统写法 /user/local
Linux01---目录结构,Linux系统下只有一个最顶级的树/,Windows系统有盘符概念,而Linux系统没有盘符概念,整个系统都在/根目录下,Linux 系统写法 /user/local
|
2天前
|
网络协议 Unix 网络安全
FTP服务器怎么搭建?Windows server搭建FPT服务器
FTP服务器是按照FTP协议提供文件传输服务的计算机。它用于在两台计算机间安全地传输文件,支持用户权限管理和跨平台操作。FTP使用控制连接处理命令,数据连接传输文件,有PORT和PASV模式。要搭建FTP服务器,首先在Windows Server 2008 R2上安装IIS,确保选中FTP服务。接着,创建FTP文件夹作为站点根目录,通过IIS管理器添加FTP站点,配置站点信息、身份验证和权限。测试客户端通过telnet和浏览器访问FTP服务器,确认能成功登录及浏览文件。FTP常用于文件共享和管理,可通过专用工具如FlashFXP上传下载文件。
11 0
FTP服务器怎么搭建?Windows server搭建FPT服务器
|
27天前
|
Ubuntu Linux C语言
【opencv】opencv在windows和linux的应用
【opencv】opencv在windows和linux的应用
|
1月前
|
运维 Linux 网络安全
跨平台SSH文件传输:Linux与Windows环境下的实践指南
本文介绍了在Linux和Windows之间使用SCP、SecureCRT及PuTTY工具集进行文件传输的方法。在Linux中,利用SCP命令进行文件下载、上传及目录传输。在Windows环境下,PSFTP和PSCP提供类似功能,而SecureCRT作为SSH客户端,支持设置上传下载目录并进行文件传输。掌握这些工具的使用可提升跨平台运维效率。
|
1月前
|
Ubuntu Linux Docker
windows 安装docker 安装Ubuntu linux
windows 安装docker 安装Ubuntu linux
79 3
|
16天前
|
Linux 数据安全/隐私保护 Windows
pscp 将Linux服务器上的文件同步到Windows服务器上
【6月更文挑战第28天】pscp 将Linux服务器上的文件同步到Windows服务器上
23 0
|
1月前
|
监控 Unix Linux
windows和linux实时监控文本内容的命令
windows和linux实时监控文本内容的命令
31 1
|
16天前
|
运维 网络协议 Linux
Linux与Windows下追踪网络路由:traceroute、tracepath与tracert命令详解
Linux与Windows下追踪网络路由:traceroute、tracepath与tracert命令详解
27 0
|
19天前
|
Linux Windows
windows和linux安装Erlang
windows和linux安装Erlang
36 0
|
23天前
|
网络协议 Linux 编译器
【原创】EtherCAT主站IgH解析(二)-- 如何将Igh移植到Linux/Windows/RTOS等多操作系统移植指南
EtherCAT主站方案对比:商业的如Acontis、TwinCAT3和开源的igh、SOEM。SOEM易移植但功能和实时性不足,适合简单应用;igh功能强大,实时性能优秀,基于内核态,适合复杂场景。igh能移植到其他RTOS,但需克服多任务无调度的挑战。依赖操作系统服务如定时器、内存分配,适合Linux内核,但移植到裸机复杂。