• 指令FTP/SFTP(有/无密码)连接、下载以及上传


    mac shell环境

    主要说明使用expect自动输入密码形式访问,以下是a.sh脚本(后缀必须是.sh)

    1. #!/bin/bash
    2. echo "SFTP 连接"
    3. # SFTP默认端口22 FTP默认端口21 (注意以下所有参数必须是字符串"")
    4. Port="22"
    5. User="UserName"
    6. Host="127.0.0.1"
    7. Pass="123456"
    8. # 将本地/local下的目录树创建到SFTP指定主机的/remote/下(利用find awk gsub进行)
    9. createFolder = `find /local/ -type d -exec ls -d {} \; | awk '{ gsub("/local/","/remote/",$1}; if($1=="")next;print "expect \"sftp>\"";print "send \"mkdir " $1"\r\""; }'`
    10. /usr/bin/expect <<FLAGEOF
    11. spawn sftp -P ${Port} ${User}@${Host}
    12. expect "password:"
    13. send ${Pass}\r
    14. expect "sftp>"
    15. send "put /local/a.txt /remote/a.txt\r"
    16. expect "sftp>"
    17. send "get /remote/a.txt /local/a.txt\r"
    18. $createFolder
    19. expect "sftp>"
    20. send "bye\r"
    21. FLAGEOF
    22. echo "结束 SFTP"

     单独解释下这一行复杂点的代码做了什么事情;

    # 将本地/local下的目录树创建到SFTP指定主机的/remote/下(利用find awk gsub进行)
     

    createFolder = `find /local/ -type d -exec ls -d {} \; | awk '{ gsub("/local/","/remote/",$1}; if($1=="")next;print "expect \"sftp>\"";print "send \"mkdir " $1"\r\""; }'`

    可拆解如下几个小块,逐一说明大概做的事情

    find /local/ -type d -exec ls -d {} \;

            查询出本地/local/路径下的全部文件夹路径输出到{}缓存

    awk '{ gsub("/local/","/remote/",$1}; if($1=="")next;print "expect \"sftp>\"";print "send \"mkdir " $1"\r\""; }'`

            awk指令取出缓存里的文件夹路径逐个进行如下操作:

    gsub("/local/","/remote/",$1};

            将路径使用/remote/替换/local/(全部替换)结果会输出到$1,即gsub是一次性替换则一定会输出到$1变量

    if($1=="")next;

            如果$1是空字符串则直接跳过这一次,否则进入如下:

    print "expect \"sftp>\"";

            打印输出expect "sftp>"指令到sftp环境下执行

    print "send \"mkdir " $1"\r\"";

            打印输出send "mkdir $1 \r"指令到sftp环境下执行

     执行a.sh方法如下

    1. cd ~/Users
    2. ./a.sh

     FTP匿名

    1. ftip -nv $Host <<EOF
    2. user anonymous \r
    3. type binary
    4. prompt
    5. put /local/a.txt /remote/a.txt
    6. get /remote/b.txt /local/b.txt
    7. bye
    8. EOF

    FTP非匿名[username]和[password]

    1. ftip -nv $Host <<EOF
    2. user yourUserName yourPassword
    3. type binary
    4. prompt
    5. put /local/a.txt /remote/a.txt
    6. get /remote/b.txt /local/b.txt
    7. bye
    8. EOF

    FTP仅输入password情况 

    1. ftip -nv $Host <<EOF
    2. pass yourPassword
    3. type binary
    4. prompt
    5. put /local/a.txt /remote/a.txt
    6. get /remote/b.txt /local/b.txt
    7. bye
    8. EOF
  • 相关阅读:
    MySQL指令收集
    StarCoder2-Instruct: 完全透明和可自我对齐的代码生成
    HTML/XML转义字符对照
    4.新建模块和代码生成
    【线性代数】P5 矩阵定义和性质
    MyBatis基于XML的使用——缓存
    003 PythonTCP网络通信
    Socket 编程
    常见IO模型(非常详细)
    Mac上安装Java的JDK多版本管理软件jEnv
  • 原文地址:https://blog.csdn.net/qq_39574690/article/details/133206796