免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13014 | 回复: 15

[系统管理] 一个FTP批量下载的脚本 [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-05-17 06:20:00
发表于 2013-08-01 21:39 |显示全部楼层
5可用积分
本帖最后由 wzqstudio 于 2013-08-01 21:45 编辑

想ftp批量下载f.txt里的文件,不成功,哪不对吗?


ftp -n 10.23.33.172 > a.txt <<!
user admin abc
binary
hash
cd /home
prompt
for i in `cat f.txt`
do
mget $i
done
close
bye
!

最佳答案

查看完整内容

网上看到的一个例子,试了一下,可以用,希望对你有用吧!http://linux.chinaitlab.com/SHELL/811768.html

论坛徽章:
1
卯兔
日期:2014-10-14 13:29:48
发表于 2013-08-01 21:39 |显示全部楼层
  1. #!/bin/bash
  2. for filename in `cat f.txt`
  3. do
  4. ftp -nv 192.168.10.21 <<!
  5. user username password
  6. prompt off
  7. bin
  8. mget $filename
  9. close
  10. !
  11. done
复制代码
网上看到的一个例子,试了一下,可以用,希望对你有用吧!
http://linux.chinaitlab.com/SHELL/811768.html

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
发表于 2013-08-01 21:44 |显示全部楼层
感觉和这个问题是一样的:
http://bbs.chinaunix.net/thread-4093026-1-1.html

改成这样试试:
  1. ftp -n 10.23.33.172 > a.txt <<EOF
  2. user admin abc
  3. binary
  4. hash
  5. cd /home
  6. prompt
  7. for i in \$(cat f.txt)
  8. do
  9. mget \$i
  10. done
  11. close
  12. bye
  13. EOF
复制代码

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-05-17 06:20:00
发表于 2013-08-01 21:53 |显示全部楼层
本帖最后由 wzqstudio 于 2013-08-01 21:56 编辑

楼上的方法不行.

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
发表于 2013-08-02 08:35 |显示全部楼层
这样试试
$a=$(cat  f.txt)
ftp -n 10.23.33.172 > a.txt <<EOF
user admin abc
binary
hash
cd /home
prompt
for i in $a
do
mget $i
done
close
bye
EOF

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
发表于 2013-08-02 09:01 |显示全部楼层
当你ftp到服务器端的时候服务器端有f.txt文件么?  其实可以开启ftp debug模式看看。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-05-17 06:20:00
发表于 2013-08-02 09:15 |显示全部楼层
回复4楼
报错
# t.sh
t.sh[2]: =.kshrc:  not found.


回复 4# bikong0411


   

论坛徽章:
1
IT运维版块每日发帖之星
日期:2016-05-17 06:20:00
发表于 2013-08-02 09:16 |显示全部楼层
回复5楼,
FTP上也有f.txt,本地也有f.txt,



回复 5# wenhq


   

论坛徽章:
5
金牛座
日期:2013-10-14 14:40:422015年亚洲杯之伊朗
日期:2015-03-26 10:37:012015亚冠之浦和红钻
日期:2015-10-12 17:47:4115-16赛季CBA联赛之山东
日期:2016-01-20 16:43:1215-16赛季CBA联赛之辽宁
日期:2016-03-29 16:43:59
发表于 2013-08-02 10:58 |显示全部楼层
你这个for循环其实是在对端的ftp下执行的,ftp下没有for语句所以就报错了
解决:
1、首先把要下载的文件都放到一个数组中
2、下载时引用数组中全部内容就可以了(做为shell变量传给mget)
linux:~/shell # cat ftp.sh
#!/bin/bash
GET=(`cat /root/shell/f.txt`)   ##把f.txt文件中的每一条都放到数组中
ftp -n 192.168.10.21 > a.txt <<!
user root suse
binary
hash
cd /home
lcd /root/shell
prompt
mget ${GET[@]}    ##引用数组内容其实就是f.txt中的项目
close
bye
!

论坛徽章:
1
技术图书徽章
日期:2013-08-30 10:47:12
发表于 2013-08-02 14:14 |显示全部楼层
#!/bin/bash
while :
do
read -p "输入1下载,输入2上传:" num
        while :
        do
        case $num in
        1)
                cd $2
                ftp -n<<!
                open $1
                user ftpd redhat
                binary
                prompt
                mget *
                quit
                !
                cd $2
                `md5sum * >/tmp/aaa`
                md5sum -c /tmp/aaa
                if [ $? -eq 0 ]
                then
                        echo "通过md5验证"
                else
                        echo "没有通过md5验证"
                fi
                exit
        ;;
        2)
                ftp -n<<!
                open $1
                user ftpd redhat
                binary
                prompt
                cd $2
                mput * $2
                quit
                !
                exit
        ;;
        *)
                echo "请重新输入"
                break
        ;;
        esac
        done
done
这是我写的 上传 和下载的脚本  ¥1  是ip  ¥2  是路径
sh ftp.sh 10.23.33.172 f.txt
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP