zoukankan      html  css  js  c++  java
  • 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到。

  • 相关阅读:
    2017洛谷7月月赛总结
    poj3169 Layout
    poj3613Cow Relays
    洛谷P1418 选点问题
    poj3311Hie with the Pie
    poj1734Sightseeing trip
    poj3728The merchant
    洛谷P2420 让我们异或吧
    struts2.1笔记02:servlet简介
    struts2.1笔记01:MVC框架思想浅层理解
  • 原文地址:https://www.cnblogs.com/hllnj2008/p/4000254.html
Copyright © 2011-2022 走看看