shell 和python 实现ftp文件上传或者下载
一、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文件上传或者下载的更多相关文章
- Python 基于Python实现Ftp文件上传,下载
基于Python实现Ftp文件上传,下载 by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...
- Java实现FTP文件上传与下载
实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 package com.cl ...
- .NET ftp文件上传和下载
文章参考来源地址:https://blog.csdn.net/wybshyy/article/details/52095542 本次对代码进行了一点扩展:将文件上传到ftp指定目录下,若目录不存在则创 ...
- FTP文件上传和下载(JAVA)
前文 1.使用FTP的方式进行文件的上传和下载(非SFTP) 2.本人手打,亲测,代码是最简单的,清晰易懂,需要的同学请结合自己的实际添加业务逻辑 2.第三方的jar包:import org.apac ...
- Java 实现ftp 文件上传、下载和删除
本文利用apache ftp工具实现文件的上传下载和删除.具体如下: 1.下载相应的jar包 commons-net-1.4.1.jar 2.实现代码如下: public class FtpUtils ...
- ftp文件上传和下载
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...
- FTP文件上传与下载
实现FTP文件上传与下载可以通过以下两种种方式实现(不知道还有没有其他方式),分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式:使用jdk中的ftpClie ...
- 【FTP】FTP文件上传下载-支持断点续传
Jar包:apache的commons-net包: 支持断点续传 支持进度监控(有时出不来,搞不清原因) 相关知识点 编码格式: UTF-8等; 文件类型: 包括[BINARY_FILE_TYPE(常 ...
- java/struts/Servlet文件下载与ftp文件上传下载
1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...
随机推荐
- 微服务架构 | 4.2 基于 Feign 与 OpenFeign 的服务接口调用
目录 前言 1. OpenFeign 基本知识 1.1 Feign 是什么 1.2 Feign 的出现解决了什么问题 1.3 Feign 与 OpenFeign 的区别与对比 2. 在服务消费者端开启 ...
- SAP下载报表速度慢?为啥你不试试python多线程
由于SAP系统自身原因,或者公司内部ABAP代码的算法效率不高,我们经常遇到,手工执行某个事务代码下载某个报表会非常耗时,小爬曾见过公司某个自开发的报表,单家公司的数据下载超过半小时.如果我们刚好接到 ...
- python网络爬虫-python基础(三)
python安装 Anaconda的python科学计算环境,只需要想普通软件一样安装就可以把python的环境变量.解释器.开发环境都安装到计算机中 除此之外anaconda还提供众多的科学计算的包 ...
- Linux 配置 SVN and ideal 配置SVN的客户端 ?
Linux 配置 SVN? 4.配置svn(服务器端) 项目管理工具(subversion),每个公司都会用到(git/svn) 目的就是为了合作开发 4.1.从linux上安装svn 不需要从官网下 ...
- JOISC 2017
Day1 「JOISC 2017 Day 1」开荒者 首先观察部分分发现分档很多,于是考虑一步步思考上来. 首先有一点关键观察(一): 风吹的顺序是无所谓的,令分别往东.西.南.北吹了 \(r, l, ...
- Redis哨兵模式高可用解决方案
一.序言 Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务. 1.目标与收获 一主两从三哨兵Redis服务,基本能够满足中小型项目的高可用要求,使 ...
- JQuery高级部分
简介 对动画.遍历.事件绑定的介绍. 操作 动画 三种方式显示和隐藏元素 show([speed,[easing],[fn]]) 默认显示和隐藏方式 参数: speed:动画的速度.三个预定义的值(& ...
- 简单仿京东"筛选"界面 双导航栏控制器共存 by Nicky.Tsui
大概就是这么一个效果 如图.大概可以看到,"筛选"视图后面有一层视图盖住了后面原来的视图 那么我们可以通过加一个view到导航栏控制器的view里面来实现 //该view作为全局变 ...
- eclipse快捷键 包括查找类、方法、变量
[Ct rl+T] 搜索当前接口的实现类 1. [ALT +/] 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类.方法和属性的名字时,多体验一下[ ...
- SQL注入的原理及一般步骤
原理 SQL注入是一种攻击方式,在这种攻击方式中,恶意代码被插入到字符串中,然后该字符串传递到SQL Server的实例以进行分析和执行.任何构成SQL语句的过程都应进行注入检查,因为SQL Serv ...