大龙的博客
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2011年12月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
留言簿
(43)
给我留言
查看公开留言
查看私人留言
收藏夹
ps
(rss)
随笔档案
2014年10月 (1)
2014年8月 (4)
2014年6月 (1)
2013年12月 (6)
2013年11月 (2)
2013年10月 (5)
2013年9月 (4)
2013年7月 (1)
2013年6月 (2)
2013年3月 (1)
2013年2月 (20)
2013年1月 (10)
2012年12月 (8)
2012年11月 (5)
2012年10月 (9)
2012年9月 (4)
2012年8月 (16)
2012年7月 (8)
2012年6月 (10)
2012年5月 (11)
2012年4月 (3)
2012年3月 (10)
2012年2月 (6)
2012年1月 (4)
2011年12月 (6)
2011年11月 (16)
2011年10月 (32)
2011年9月 (13)
2011年8月 (6)
2011年7月 (27)
2011年6月 (18)
2011年5月 (12)
2011年4月 (2)
2011年3月 (1)
2011年2月 (5)
2011年1月 (24)
2010年12月 (5)
2010年11月 (2)
2010年10月 (3)
2010年9月 (4)
2010年8月 (7)
2010年6月 (13)
2010年5月 (18)
2010年4月 (21)
2010年3月 (6)
2010年2月 (7)
2010年1月 (7)
2009年12月 (7)
2009年11月 (2)
2009年10月 (8)
2009年9月 (19)
2009年8月 (11)
2009年6月 (28)
2009年5月 (35)
2009年4月 (18)
2009年3月 (24)
2009年2月 (13)
2009年1月 (10)
2008年12月 (2)
2008年11月 (6)
2008年10月 (4)
2008年9月 (11)
2008年8月 (18)
2008年7月 (8)
2008年6月 (19)
2008年5月 (9)
2008年4月 (6)
2008年3月 (2)
2008年2月 (4)
2008年1月 (21)
2007年12月 (14)
2007年11月 (4)
2007年10月 (7)
2007年9月 (17)
2007年8月 (10)
2007年7月 (20)
2007年6月 (11)
2007年5月 (8)
2007年4月 (13)
2007年3月 (2)
2007年2月 (6)
2007年1月 (14)
2006年12月 (23)
2006年11月 (15)
2006年10月 (5)
2006年9月 (4)
文章档案
2007年11月 (1)
2006年12月 (1)
阅读排行榜
1. LinuxShell算术运算(49299)
2. Windows XP DDK 的有效下载地址(45089)
3. WinDBG教程(40917)
4. Android 打包签名 从生成keystore到完成签名 -- 转(40648)
5. 在Cygwin上安装编辑器vim (38981)
评论排行榜
1. Windows XP DDK 的有效下载地址(116)
2. 在Cygwin上安装编辑器vim (24)
3. (TCP-over-UDP library):基于UDP协议之上实现通用、可靠、高效的TCP协议 ---------- 转(14)
4. Compuware DriverStudio V3.2(10)
5. 经典好书 (10)
常用链接
我的随笔
我的评论
我参与的随笔
统计
随笔 - 864
文章 - 2
评论 - 378
引用 - 0
最新评论
1. re: 安装Nexus私服
谢谢博主。我刚学搭建nexus,挺不错的。
--做有为青年
2. re: 用slf4j+logback实现多功能日志解决方案 --- 转
谢谢楼主,整个流程非常清楚,照着做了一遍就会了。另外我分享一个logback目前尚存在的bug:当你发现INFO级和ERROR级的日志没有写成功时,上下移动一下配置文件中appender的位置就好了。
--welldone
3. re: LinuxShell算术运算
你这些都验证过吗
--是是是
4. re: 用slf4j+logback实现多功能日志解决方案 --- 转
写的非常好!
--Hello
5. re: (TCP-over-UDP library):基于UDP协议之上实现通用、可靠、高效的TCP协议 ---------- 转
评论内容较长,点击标题查看
--pcplayer
python实现的ftp自动上传下载程序(支持目录递归操作)----转
因为python脚本可以直接用文本工具打开修改,所以没有设置参数。使用的时候直接修改掉main中的连接下载参数即可。
修改一下,可以用来备份网站上的图片,数据库什么的。
Python代码
#!/usr/bin/python
#coding=gbk
''
'''
ftp自动下载、自动上传脚本,可以递归目录操作
'''
from
ftplib
import
FTP
import
os,sys,string,datetime,time
import
socket
class
MYFTP:
def
__init__(
self
, hostaddr, username, password, remotedir, port=
21
):
self
.hostaddr = hostaddr
self
.username = username
self
.password = password
self
.remotedir = remotedir
self
.port = port
self
.ftp = FTP()
self
.file_list = []
# self.ftp.set_debuglevel(2)
def
__del__(
self
):
self
.ftp.close()
# self.ftp.set_debuglevel(0)
def
login(
self
):
ftp =
self
.ftp
try
:
timeout =
60
socket.setdefaulttimeout(timeout)
ftp.set_pasv(
True
)
print
'开始连接到 %s'
%(
self
.hostaddr)
ftp.connect(
self
.hostaddr,
self
.port)
print
'成功连接到 %s'
%(
self
.hostaddr)
print
'开始登录到 %s'
%(
self
.hostaddr)
ftp.login(
self
.username,
self
.password)
print
'成功登录到 %s'
%(
self
.hostaddr)
debug_print(ftp.getwelcome())
except
Exception:
deal_error(
"连接或登录失败"
)
try
:
ftp.cwd(
self
.remotedir)
except
(Exception):
deal_error(
'切换目录失败'
)
def
is_same_size(
self
, localfile, remotefile):
try
:
remotefile_size =
self
.ftp.size(remotefile)
except
:
remotefile_size = -
1
try
:
localfile_size = os.path.getsize(localfile)
except
:
localfile_size = -
1
debug_print(
'lo:%d re:%d'
%(localfile_size, remotefile_size),)
if
remotefile_size == localfile_size:
return
1
else
:
return
0
def
download_file(
self
, localfile, remotefile):
if
self
.is_same_size(localfile, remotefile):
debug_print(
'%s 文件大小相同,无需下载'
%localfile)
return
else
:
debug_print(
'>>>>>>>>>>>>下载文件 %s ... ...'
%localfile)
#return
file_handler = open(localfile,
'wb'
)
self
.ftp.retrbinary(
'RETR %s'
%(remotefile), file_handler.write)
file_handler.close()
def
download_files(
self
, localdir=
'./'
, remotedir=
'./'
):
try
:
self
.ftp.cwd(remotedir)
except
:
debug_print(
'目录%s不存在,继续...'
%remotedir)
return
if
not
os.path.isdir(localdir):
os.makedirs(localdir)
debug_print(
'切换至目录 %s'
%
self
.ftp.pwd())
self
.file_list = []
self
.ftp.dir(
self
.get_file_list)
remotenames =
self
.file_list
#print(remotenames)
#return
for
item
in
remotenames:
filetype = item[
0
]
filename = item[
1
]
local = os.path.join(localdir, filename)
if
filetype ==
'd'
:
self
.download_files(local, filename)
elif
filetype ==
'-'
:
self
.download_file(local, filename)
self
.ftp.cwd(
'..'
)
debug_print(
'返回上层目录 %s'
%
self
.ftp.pwd())
def
upload_file(
self
, localfile, remotefile):
if
not
os.path.isfile(localfile):
return
if
self
.is_same_size(localfile, remotefile):
debug_print(
'跳过[相等]: %s'
%localfile)
return
file_handler = open(localfile,
'rb'
)
self
.ftp.storbinary(
'STOR %s'
%remotefile, file_handler)
file_handler.close()
debug_print(
'已传送: %s'
%localfile)
def
upload_files(
self
, localdir=
'./'
, remotedir =
'./'
):
if
not
os.path.isdir(localdir):
return
localnames = os.listdir(localdir)
self
.ftp.cwd(remotedir)
for
item
in
localnames:
src = os.path.join(localdir, item)
if
os.path.isdir(src):
try
:
self
.ftp.mkd(item)
except
:
debug_print(
'目录已存在 %s'
%item)
self
.upload_files(src, item)
else
:
self
.upload_file(src, item)
self
.ftp.cwd(
'..'
)
def
get_file_list(
self
, line):
ret_arr = []
file_arr =
self
.get_filename(line)
if
file_arr[
1
]
not
in
[
'.'
,
'..'
]:
self
.file_list.append(file_arr)
def
get_filename(
self
, line):
pos = line.rfind(
':'
)
while
(line[pos] !=
' '
):
pos +=
1
while
(line[pos] ==
' '
):
pos +=
1
file_arr = [line[
0
], line[pos:]]
return
file_arr
def
debug_print(s):
print
(s)
def
deal_error(e):
timenow = time.localtime()
datenow = time.strftime(
'%Y-%m-%d'
, timenow)
logstr =
'%s 发生错误: %s'
%(datenow, e)
debug_print(logstr)
file.write(logstr)
sys.exit()
if
__name__ ==
'__main__'
:
file = open(
"log.txt"
,
"a"
)
timenow = time.localtime()
datenow = time.strftime(
'%Y-%m-%d'
, timenow)
logstr = datenow
# 配置如下变量
hostaddr =
'localhost'
# ftp地址
username =
'test'
# 用户名
password =
'test'
# 密码
port =
21
# 端口号
rootdir_local =
'.'
+ os.sep +
'bak/'
# 本地目录
rootdir_remote =
'./'
# 远程目录
f = MYFTP(hostaddr, username, password, rootdir_remote, port)
f.login()
f.download_files(rootdir_local, rootdir_remote)
timenow = time.localtime()
datenow = time.strftime(
'%Y-%m-%d'
, timenow)
logstr +=
" - %s 成功执行了备份\n"
%datenow
debug_print(logstr)
file.write(logstr)
file.close()
posted on 2011-12-14 11:15
大龙
阅读(2730)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © 大龙