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 ...
随机推荐
- JavaScript的内存管理
JavaScript的内存管理 1.什么是内存管理? 在了解JavaScript的内存管理之前,可以先大致熟悉一下什么是内存管理,不管什么样的编程语言,在其代码执行的过程中都是需要为其分配内存的. 不 ...
- SpringBoot Log4j 安全漏洞分析及解决方案
一.序言 SpringBoot作为Java基础框架大行其道,前不久爆发出Log4j安全漏洞,大众更多关心Log4j的危害是多么严重,然而鲜有关心SpringBoot这一底层框架的安全性问题,换而言之, ...
- Android中的多线程【转】
感谢大佬:https://www.cnblogs.com/zoe-mine/p/7954605.html 感谢大佬:https://blog.csdn.net/u014555121/article/d ...
- Emoji与unicode特殊字符的处理
遇到了一个很让人纠结的问题:emoji表情在使用的过程中,会莫名其妙的消失,或者变成乱码,同时数据库用utf8mb4来存储,但是也出现了问题,冷备过后,导入进库的时候,变成了不可见字符,神奇的消失了! ...
- httpclient方式提交数据到服务器
get方式: //使用HttpClient请求服务器将用户密码发送服务器验证 try{ String path = "http://192.168.13.83:8080/xuexi/serv ...
- sublime中的emmet插件的使用技巧
1.我要生成一个2行3列,宽300px,高500px的表. table[width=300 height=500]>(tr>td{$}*3)*2
- LAMP架构—源码编译安装 (爱情受过伤,为爱跳过鸭绿江)
LAMP架构--源码编译安装 1.LAMP架构概述 2.编译安装Apache httpd 服务 3.编译安装mysql 服务 4.编译安装PHP 解析服务 5.利用LAMP搭建论坛 1.LAMP架构概 ...
- 使用Docker安装ElasticSearch和可视化界面Kibana【图文教学】
一.前言 Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java语言开发的,并 ...
- 04 js
js 1. JavaScript概述 JavaScript(简称"JS") 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言.虽然它是作为开发Web页面的脚本语言而出名,但 ...
- v77.01 鸿蒙内核源码分析(消息封装篇) | 剖析LiteIpc(上)进程通讯内容 | 新的一年祝大家生龙活虎 虎虎生威
百篇博客分析|本篇为:(消息封装篇) | 剖析LiteIpc进程通讯内容 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁 ...