一、shell脚本

#####从ftp服务器上的/home/data 到 本地的/home/databackup####
#!/bin/bash
ftp -n<<!
open 172.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 172.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
!

二、python脚本批量下载

#code:utf-8
from ftplib import FTP
import os ftp_list={
'hostname':'171.20.3.333',
'username':'test',
'password':'123456',
'port':'21'
}
def ftp_login(**ftp_list):
'''
:param ftp_list:
:return: 登录ftp 返回一个ftp实例
'''
try:
ftp=FTP()
     ftp.encoding = "utf-8"  ###################################留意ftp路径如果有中文,必须设置这个。

ftp.connect(ftp_list['hostname'],ftp_list['port'])
      ftp.login(ftp_list['username'],ftp_list['port'])
print("登录成功")
except:
print("登录ftp失败")
else:
return ftp def ftp_download(self,remote_path,local_path):
'''
下载远程机器上的tar.gz压缩包
:param self:
:param remote_path:
:param local_path:
:return:
'''
ftp=ftp_login(**ftp_list)
try:
res=ftp.nlst(remote_path)
for file in res :
file_name=file.split('/')[-1]
bufsize = 1024
local_file = open(local_path+'/'+file_name,"wb") #二进制方式打开一个文件
ftp.retrbinary('RETR %s'%(file_name),local_file.write,bufsize)
ftp.set_debuglevel(0)
local_file.close() #关闭本地文件
except:
print("连接异常") def ftp_upload(self,remote_path,local_path):
'''
批量上传本地文件
:param self:
:param remote_path:
:param local_path:
:return:
'''
ftp = ftp_login(**ftp_list)
try:
ftp.mkd(remote_path)
res=os.walk(local_path,topdown=True)
for main_dir_list,insub_dir_list,file_list in res:
for filename in file_list:
local_file = os.path.join(main_dir_list,filename)
remote_file=remote_path+filename
bufsize = 1024
fp = open(local_file, 'rb')
ftp.storbinary('STOR ' + remote_file, ftp, bufsize)
ftp.close()
except:
print(0)

三实际应用场景:发版本自动从ftp服务器拉取代码

#code:utf-8
from ftplib import FTP
import os
import sys
full_vserion='4.0.0.149' #版本号 #sys.argv[1] #
root_path='*************' #具体路径
full_vserion_sub_path=full_vserion.split('.')[0]+'.'+full_vserion.split('.')[1]+'.'+full_vserion.split('.')[2]
sub_file=full_vserion.split('.')[-1] ftp_list={
'hostname':'172.30.3.222',
'username':'test',
'password':'123456',
'port':21
} def ftp_login(**ftp_list):
'''
:param ftp_list:
:return: 登录ftp 返回一个ftp实例
'''
try:
ftp = FTP()
ftp.connect(ftp_list['hostname'], ftp_list['port'])
ftp.login(ftp_list['username'], ftp_list['password'])
except:
print("登录ftp失败")
else:
return ftp def ftp_download(remote_path,local_path):
'''
下载远程机器上的tar.gz压缩包
:param self:
:param remote_path:
:param local_path:
:return:
'''
ftp=ftp_login(**ftp_list)
ftp.encoding = "utf-8" ##############请留意
file_list = ftp.nlst(remote_path)
try:
for file_name in file_list:
if not file_name == "yylending-cms-%s.tar.gz" % (full_vserion):
print("版本号有误,请核实")
exit(0)
bufsize = 1024
local_file = open(local_path + '/' + file_name, "wb") # 二进制方式打开一个文件
print(remote_path + '/' + file_name) ftp.retrbinary('RETR %s' % (remote_path + '/' + file_name), local_file.write, bufsize)
ftp.set_debuglevel(0)
local_file.close() # 关闭本地文件
except:
print("连接异常") print(root_path)
print(full_vserion_sub_path)
print(full_vserion)
remote_path=root_path+'/'+full_vserion_sub_path+'/'+full_vserion
ftp_download(remote_path,'C:')

shell 和python 实现ftp文件上传或者下载的更多相关文章

  1. Python 基于Python实现Ftp文件上传,下载

    基于Python实现Ftp文件上传,下载   by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...

  2. Java实现FTP文件上传与下载

    实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cl ...

  3. .NET ftp文件上传和下载

    文章参考来源地址:https://blog.csdn.net/wybshyy/article/details/52095542 本次对代码进行了一点扩展:将文件上传到ftp指定目录下,若目录不存在则创 ...

  4. FTP文件上传和下载(JAVA)

    前文 1.使用FTP的方式进行文件的上传和下载(非SFTP) 2.本人手打,亲测,代码是最简单的,清晰易懂,需要的同学请结合自己的实际添加业务逻辑 2.第三方的jar包:import org.apac ...

  5. Java 实现ftp 文件上传、下载和删除

    本文利用apache ftp工具实现文件的上传下载和删除.具体如下: 1.下载相应的jar包 commons-net-1.4.1.jar 2.实现代码如下: public class FtpUtils ...

  6. ftp文件上传和下载

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  7. FTP文件上传与下载

    实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式:使用jdk中的ftpClie ...

  8. 【FTP】FTP文件上传下载-支持断点续传

    Jar包:apache的commons-net包: 支持断点续传 支持进度监控(有时出不来,搞不清原因) 相关知识点 编码格式: UTF-8等; 文件类型: 包括[BINARY_FILE_TYPE(常 ...

  9. java/struts/Servlet文件下载与ftp文件上传下载

    1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...

随机推荐

  1. MySql下载与安装(部署)

    一:MySQL介绍 1.MySQL简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB ...

  2. springboot 分布式项目,子级项目各自的作用。

    一.分布式项目,需要使用maven搭建. 1.1 父级pro.xml module. <?xml version="1.0" encoding="UTF-8&quo ...

  3. SharePoint Online 触发 Outlook 邮件内审批

    前言 我们在做SharePoint Online项目时, 经常会有客户问,我们能否在通知邮件中快速完成审批,而不是需要在邮件中打开系统,然后在系统中审批? 答案肯定是可以的,来!安排! 正文 1.我们 ...

  4. MySQL 1093 - You can't specify target table 'sc' for update in FROM clause

    错误代码如下: #(8) 把"邓维杰"同学的成绩全部删除. SELECT * FROM sc WHERE EXISTS(SELECT * FROM student WHERE st ...

  5. 学习jsp篇:jsp简单实例之二登录

    编程环境:IDEA,Tomcat,JavaEE 一.实例二登录 1.在自己建的工程下的web目录下建一个文件夹为login,在login中编写登录代码(其实就是和实例一同一个项目) 2.先建登录页面j ...

  6. FidBugs的使用学习

    是什么? 静态代码分析器,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness, ...

  7. kebernet--新手填坑

    1.安装好kubernet之后,新建rc后,里面的容器一直ImagePullBackOff ,镜像无法拉取: ----需要配置docker镜像为国内镜像,记得在各个Node上都要配置!!! vim / ...

  8. Volatile关键字和ThreadLocal变量的简单使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11812459.html package thread; /** * volatile关键字和T ...

  9. 剑指Offer系列_09_用两个栈实现队列

    package leetcode.sword_to_offfer.day01; import java.util.LinkedList; /** * 用两个栈实现一个队列.队列的声明如下,请实现它的两 ...

  10. docker中run和start的区别?

    docker run 后面指定的是一个镜像 而docker start指定的是一个容器 docker run是利用镜像生成容器,并启动容器,而docker start是启动一个之前生成过的容器