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 ...
随机推荐
- 人口信息普查系统-JavaWeb-四
今天给大家分享前端人口登记页面,人口查询页面 人口登记 <%@ page language="java" contentType="text/html; chars ...
- jstl split 分割字符串?
1. 在已经获得数据的前提下,对数据进行分割,分割后的结果是一个数组,可以通过数组获得我们需要的数据 2. value 是获得值 需要${} 的方式获取, var 是设置变量. var = " ...
- 开发升讯威在线客服系统启示录:怎样编写堪比 MSDN 的用户手册
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com 文章目 ...
- 求一个number数组中的最大值和最小值的差
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- 张高兴的 .NET IoT 入门指南:(七)制作一个气象站
距离上一篇<张高兴的 .NET Core IoT 入门指南>系列博客的发布已经过去 2 年的时间了,2 年的时间 .NET 版本发生了巨大的变化,.NET Core 也已不复存在,因此本系 ...
- MySQL 事务的隔离级别及锁操作的一点点演示
MySQL 版本:5.7 安装环境:MAC OS 一.测试数据 测试数据库:test:测试表:tt CREATE TABLE `tt` ( `id` int(11) DEFAULT NULL, `na ...
- 社交网络分析的 R 基础:(四)循环与并行
前三章中列出的大多数示例代码都很短,并没有涉及到复杂的操作.从本章开始将会把前面介绍的数据结构组合起来,构成真正的程序.大部分程序是由条件语句和循环语句控制,R 语言中的条件语句(if-else)和 ...
- IntelliJ IDEA 学习笔记 - 修改编码
感谢原文作者:codeke 原文链接:https://blog.csdn.net/cgl125167016/article/details/78666432 仓库:https://github.com ...
- Posix 信号
转载请注明来源:https://www.cnblogs.com/hookjc/ 函数sem_open创建一个新的有名信号灯或打开一个已存在的有名信号灯.有名信号灯总是既可用于线程间的同步,又可以用于进 ...
- jstack与jmap分析java堆栈信息
首先确定要查询的服务进程pid,可用ps -ef|grep 进程名称 jstack -l pid >> stack_info.txt,将此进程的堆栈信息导出到txt文件中 其中" ...