首页 > 代码库 > ftp在shell脚本中的使用方法

ftp在shell脚本中的使用方法

1. ftp自动登录批量下载文件。

#####从ftp服务器上的/home/data 到 本地的/home/databackup####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
mget *
close
bye
!
2. ftp自动登录上传文件。

####本地的/home/databackup to ftp服务器上的/home/data####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
hash
cd /home/data
lcd /home/databackup
prompt
mput *
close
bye
!

3. ftp自动登录下载单个文件。
####ftp服务器上下载/home/data/a.sh to local /home/databackup####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
get a.sh a.sh 
close
bye
!

4. ftp自动登录上传单个文件。
####把本地/home/databachup/a.sh up ftp /home/databackup 下####
#!/bin/bash
ftp -n<<!
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
put a.sh a.sh 
close
bye
!

"!"一定要在首行
小结:把以上脚本另存为文件加入到crontab中即可实现ftp自动上传、下载文件。
注解:
1. -n 不受.netrc文件的影响。(ftp默认为读取.netrc文件中的设定)
2. << 是使用即时文件重定向输入。
3. !是即时文件的标志它必须成对出现,以标识即时文件的开始和结尾。

-----------------------------------------------------------------------------------------------

在windows下非常简单,windows下的ftp客户端有一个-s参数可以带一个文件,把所有在ftp命令行下要输入的内容照原样输入到这个文件中,用ftp -s去执行就可以。例如:
open 10.60.56.90
whb
123456
get test
close
bye
把这个文件保存为autologin.txt。
E:/>ftp -s:autologin.txt
ftp> open 10.60.56.90
Connected to 10.60.56.90.
220 (vsFTPd 2.0.5)
User (10.60.56.90:(none)):
331 Please specify the password.

230 Login successful.
ftp> get test
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test (5 bytes).
226 File send OK.
ftp: 收到 5 字节,用时 0.00Seconds 5000.00Kbytes/sec.
ftp> close
221 Goodbye.
ftp> bye

E:/>
如果是匿名登录,密码那一行留空。

在linux下,上面的方法失效。Bruce Ediger在http://www.stratigery.com//scripting.ftp.html这篇文章中详细介绍了在shell脚本中使用ftp的方法。简单总结如下:
方法一:
#!/bin/bash 
SERVER=server
USERNAME=username
PASSWORD=password
ftp -n $server <<SCRIPT 
quote USER $username
quote PASS $password
cd remote_path
lcd local_path
binary 
verbose 
get something
put something
close 
quit 
SCRIPT 
方法二:
#!/bin/bash 
SERVER=server
USERNAME=username
PASSWORD=password
ftp -n $server <<SCRIPT 
user $USERNAME $PASSWORD
cd remote_path
lcd local_path
binary 
verbose 
get something
put something
close 
quit 
SCRIPT 
方法三:使用.netrc
可以用man netrc看这个文件的配置参数。比如写如下的.netrc文件:
machine whb 
login whb 
password 123456 
 
machine node6 
login globus 
password 123456 
需要注意的是,如果在.netrc文件中使用password设置了ftp登录密码,那么除该文件所有者外,其他用户对该文件都不能有读权限,否则自动登录会失败。
[whb@jcwkyl ~]$ chmod 600 .netrc 
[whb@jcwkyl ~]$ ftp node6 
Connected to node6.jlu.edu.cn. 
220 (vsFTPd 1.1.3) 
530 Please login with USER and PASS. 
530 Please login with USER and PASS. 
KERBEROS_V4 rejected as an authentication type 
331 Please specify the password. 
230 Login successful. Have fun. 
Remote system type is UNIX. 
Using binary mode to transfer files. 
ftp>  

另外,网上有众多使用expect实现的方法,可以google到。

ftp在shell脚本中的使用方法