一、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. javaweb登陆界面实现不同角色进入不同界面

    目录结构 类包: AccountBean.java AccountDao.java JudgeServlet.java 登陆界面: index.jsp 代码实现 AccountBean.java pa ...

  2. 『无为则无心』Python基础 — 41、Python中文件的读写操作(一)

    目录 1.文件操作步骤 2.文件的读写操作 (1)文件的打开 (2)打开文件模式 (3)获取一个文件对象 (4)关于文件路径 1.文件操作步骤 当我们要读取或者写入文件时,我们需要打开文件,在操作完毕 ...

  3. X000101

    P3879 [TJOI2010]阅读理解 考虑用 Trie 解决 #include<stdio.h> #include<bitset> #include<string.h ...

  4. Redis 中如何保证数据的不丢失,Redis 中的持久化是如何进行

    Redis 中数据的持久化 前言 AOF 持久化 什么是 AOF 持久化 为什么要后记录日志呢 AOF 的潜在风险 AOF 文件的写入和同步 AOF 文件重写机制 AOF 的数据还原 RDB 持久化 ...

  5. Python调用windows下DLL详解 - ctypes库的使用

    在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分数据的交互.使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件),下面将详 ...

  6. Mysql批量删除和修改某个前缀的表

    1.批量删除某个前缀的表名,首先选出这些个表. select concat( 'drop table ', table_name, ';' ) from information_schema.tabl ...

  7. Python—列表元组和字典

    Python-列表元组和字典 列表 元组 字典 列表: 列表是Python中的一种数据结构,他可以存储不同类型的数据.尽量存储同一种类型 列表索引是从0开始的,我们可以通过索引来访问列表的值. 列表的 ...

  8. Pytest用例编写1

      一.编写pytest测试样例非常简单,只需要按照下面的规则: 测试文件以test_开头(以_test结尾也可以) 测试类以Test开头,并且不能带有 __init__ 方法 测试函数以test_开 ...

  9. 如何对Spring MVC中的Controller进行单元测试

    对Controller进行单元测试是Spring框架原生就支持的能力,它可以模拟HTTP客户端发起对服务地址的请求,可以不用借助于诸如Postman这样的外部工具就能完成对接口的测试. 具体来讲,是由 ...

  10. 03 前端基础之JavaScript

    目录 前端基础之JavaScript JavaScript JavaScript注释 变量与常量 基本数据类型 number类型 string类型 boolean类型 null与undefined类型 ...