当前位置:首页 » 文件管理 » 编写定时下载ftp文件脚本

编写定时下载ftp文件脚本

发布时间: 2024-10-08 13:30:18

⑴ shell脚本实现定时生成个以当前时间命名的TXT文件,然后ftp上传到另一台服务器上,这个怎么写啊

#!/bin/bash
#----------请自定义如下内容----------
user=root#FTP用户名
password=root#密码
remoteDir=/tmp#远程服务器FTP目录
#------------------------------------
currTime=$(date"+%Y%m%d%H%M%S")
filename=${currTime}.txt
touch$filename
sync
ftp-in<<-EOF
user$user$password
cd$remoteDir
bin
put$filename
bye
EOF

⑵ 请教高手,用批处理命令FTP自动下载文件。

① 如果我理解没错,远端目录,最深层的那个子目录(名称是日期)的那个,每天都是变的;你要下载的是里面的文件(不含子目录);文件下载到本地E:dzyl下,而且目录也是按服务器上的日期创建。

② 批处理固定每天运行,从服务器前一天的目录下载文件。


如果理解正确,那么下面的代码可以实现(已测试过),ip地址你需要修改!你的操作系统如果是英文,也需呀修改(具体看脚本中的提示)

@echooff&
set"ftp_site=19.6.5.34"
set"ftp_id=pracq"
set"ftp_pwd=123456"
set"ftp_remote_dir=/ftp/bos/at/pracq/"
set"ftp_local_dir=E:dzyl"
:100
set"ftpcmd={{%random%}}.ftp"
ifexist%ftpcmd%goto100

::英文系统用下面这个,把下面一行中的::去除
::set"today=%date:~6,4%%date:~0,2%%date:~3,2%"
::中文系统用下面这个,如果是英文,在下面一行句首添加::
set"today=%date:~0,4%%date:~5,2%%date:~8,2%"

settoday=!today:~0,4!-!today:~4,2!-!today:~-2!
call:Date2Day!today!1Yesterday
setftp_remote_dir=!ftp_remote_dir!!yesterday!
>%ftpcmd%echoopen!ftp_site!
>>%ftpcmd%echo!ftp_id!
>>%ftpcmd%echo!ftp_pwd!
>>%ftpcmd%echocd!ftp_remote_dir!
>>%ftpcmd%echobye
for/f%%iin('ftp-s:%ftpcmd%')doif{%%i}=={550}(
!
gotoend
)
setftp_local_dir=!ftp_local_dir!!yesterday!
md!ftp_local_dir!1>nul2>&1
ifnotexist!ftp_local_dir!(
!
gotoend
)

>%ftpcmd%echoopen!ftp_site!
>>%ftpcmd%echo!ftp_id!
>>%ftpcmd%echo!ftp_pwd!
>>%ftpcmd%echocd!ftp_remote_dir!
>>%ftpcmd%echolcd!ftp_local_dir!
>>%ftpcmd%echobinary
>>%ftpcmd%echopromptn
>>%ftpcmd%echomget*.*
>>%ftpcmd%echobye
set/acount=0
for/f%%iin('ftp-s:%ftpcmd%')do(
if{%%i}=={226}set/acount=!count%+1
)
if!count!gtr0(
echoDone.!count!file^(s^)downloaded.
)else(
echoNofilehasbeendownloaded.
)
gotoend

:Date2Day
::call:Date2Day2007-11-122Day
@echooff&setlocal
for/f"tokens=1-3delims=/-:,"%%ain('echo/%~1')do(
set/ayy=%%a,mm=100%%b%%100,dd=100%%c%%100
)
set/az=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set/aj=j/5+dd+y*365+y/4-y/100+y/400-2472633
set/ai=j-%~2,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set/ad=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set/add=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if%mm%LSS10setmm=0%mm%)&(if%dd%LSS10setdd=0%dd%)
endlocal&set%~3=%yy%%f%%mm%%f%%dd%&
goto:eof

:end
ifexist%ftpcmd%(typenul>%ftpcmd%&&del/f/q%ftpcmd%1>nul2>&1)
endlocal&@echoon

测试运行结果:

Done.5file(s)downloaded.

⑶ 用python写测试脚本,从本地传文件至ftp远程路径

转自:http://news.tuxi.com.cn/kf/article/jhtdj.htm

本文实例讲述了python实现支持目录FTP上传下载文件的方法。分享给大家供大家参考。具体如下:

该程序支持ftp上传下载文件和目录、适用于windows和linux平台。

#!/usr/bin/envpython
#-*-coding:utf-8-*-
importftplib
importos
importsys
classFTPSync(object):
conn=ftplib.FTP()
def__init__(self,host,port=21):
self.conn.connect(host,port)
deflogin(self,username,password):
self.conn.login(username,password)
self.conn.set_pasv(False)
printself.conn.welcome
deftest(self,ftp_path):
printftp_path
printself._is_ftp_dir(ftp_path)
#printself.conn.nlst(ftp_path)
#self.conn.retrlines('LIST./a/b')
#ftp_parent_path=os.path.dirname(ftp_path)
#ftp_dir_name=os.path.basename(ftp_path)
#printftp_parent_path
#printftp_dir_name
def_is_ftp_file(self,ftp_path):
try:
ifftp_pathinself.conn.nlst(os.path.dirname(ftp_path)):
returnTrue
else:
returnFalse
exceptftplib.error_perm,e:
returnFalse
def_ftp_list(self,line):
list=line.split('')
ifself.ftp_dir_name==list[-1]andlist[0].startswith('d'):
self._is_dir=True
def_is_ftp_dir(self,ftp_path):
ftp_path=ftp_path.rstrip('/')
ftp_parent_path=os.path.dirname(ftp_path)
self.ftp_dir_name=os.path.basename(ftp_path)
self._is_dir=False
ifftp_path=='.'orftp_path=='./'orftp_path=='':
self._is_dir=True
else:
#thisuescallbackfunction,thatwillchange_is_dirvalue
try:
self.conn.retrlines('LIST%s'%ftp_parent_path,self._ftp_list)
exceptftplib.error_perm,e:
returnself._is_dir
returnself._is_dir
defget_file(self,ftp_path,local_path='.'):
ftp_path=ftp_path.rstrip('/')
ifself._is_ftp_file(ftp_path):
file_name=os.path.basename(ftp_path)
#如果本地路径是目录,下载文件到该目录
ifos.path.isdir(local_path):
file_handler=open(os.path.join(local_path,file_name),'wb')
self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路径不是目录,但上层目录存在,则按照本地路径的文件名作为下载的文件名称
elifos.path.isdir(os.path.dirname(local_path)):
file_handler=open(local_path,'wb')
self.conn.retrbinary("RETR%s"%(ftp_path),file_handler.write)
file_handler.close()
#如果本地路径不是目录,且上层目录不存在,则退出
else:
print'EROOR:Thedir:%sisnotexist'%os.path.dirname(local_path)
else:
print'EROOR:Theftpfile:%sisnotexist'%ftp_path
defput_file(self,local_path,ftp_path='.'):
ftp_path=ftp_path.rstrip('/')
ifos.path.isfile(local_path):
file_handler=open(local_path,"r")
local_file_name=os.path.basename(local_path)
#如果远程路径是个目录,则上传文件到这个目录,文件名不变
ifself._is_ftp_dir(ftp_path):
self.conn.storbinary('STOR%s'%os.path.join(ftp_path,local_file_name),file_handler)
#如果远程路径的上层是个目录,则上传文件,文件名按照给定命名
elifself._is_ftp_dir(os.path.dirname(ftp_path)):
print'STOR%s'%ftp_path
self.conn.storbinary('STOR%s'%ftp_path,file_handler)
#如果远程路径不是目录,且上一层的目录也不存在,则提示给定远程路径错误
else:
print'EROOR:Theftppath:%siserror'%ftp_path
file_handler.close()
else:
print'ERROR:Thefile:%sisnotexist'%local_path
defget_dir(self,ftp_path,local_path='.',begin=True):
ftp_path=ftp_path.rstrip('/')
#当ftp目录存在时下载
ifself._is_ftp_dir(ftp_path):
#如果下载到本地当前目录下,并创建目录
#下载初始化:如果给定的本地路径不存在需要创建,同时将ftp的目录存放在给定的本地目录下。
#ftp目录下文件存放的路径为local_path=local_path+os.path.basename(ftp_path)
#例如:将ftp文件夹a下载到本地的a/b目录下,则ftp的a目录下的文件将下载到本地的a/b/a目录下
ifbegin:
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
local_path=os.path.join(local_path,os.path.basename(ftp_path))
#如果本地目录不存在,则创建目录
ifnotos.path.isdir(local_path):
os.makedirs(local_path)
#进入ftp目录,开始递归查询
self.conn.cwd(ftp_path)
ftp_files=self.conn.nlst()
forfileinftp_files:
local_file=os.path.join(local_path,file)
#如果fileftp路径是目录则递归上传目录(不需要再进行初始化begin的标志修改为False)
#如果fileftp路径是文件则直接上传文件
ifself._is_ftp_dir(file):
self.get_dir(file,local_file,False)
else:
self.get_file(file,local_file)
#如果当前ftp目录文件已经遍历完毕返回上一层目录
self.conn.cwd("..")
return
else:
print'ERROR:Thedir:%sisnotexist'%ftp_path
return

defput_dir(self,local_path,ftp_path='.',begin=True):
ftp_path=ftp_path.rstrip('/')
#当本地目录存在时上传
ifos.path.isdir(local_path):
#上传初始化:如果给定的ftp路径不存在需要创建,同时将本地的目录存放在给定的ftp目录下。
#本地目录下文件存放的路径为ftp_path=ftp_path+os.path.basename(local_path)
#例如:将本地文件夹a上传到ftp的a/b目录下,则本地a目录下的文件将上传的ftp的a/b/a目录下
ifbegin:
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)
ftp_path=os.path.join(ftp_path,os.path.basename(local_path))
#如果ftp路径不是目录,则创建目录
ifnotself._is_ftp_dir(ftp_path):
self.conn.mkd(ftp_path)

#进入本地目录,开始递归查询
os.chdir(local_path)
local_files=os.listdir('.')
forfileinlocal_files:
#如果file本地路径是目录则递归上传目录(不需要再进行初始化begin的标志修改为False)
#如果file本地路径是文件则直接上传文件
ifos.path.isdir(file):
ftp_path=os.path.join(ftp_path,file)
self.put_dir(file,ftp_path,False)
else:
self.put_file(file,ftp_path)
#如果当前本地目录文件已经遍历完毕返回上一层目录
os.chdir("..")
else:
print'ERROR:Thedir:%sisnotexist'%local_path
return
if__name__=='__main__':
ftp=FTPSync('192.168.1.110')
ftp.login('test','test')
#上传文件,不重命名
#ftp.put_file('111.txt','a/b')
#上传文件,重命名
#ftp.put_file('111.txt','a/112.txt')
#下载文件,不重命名
#ftp.get_file('/a/111.txt',r'D:\')
#下载文件,重命名
#ftp.get_file('/a/111.txt',r'D:112.txt')
#下载到已经存在的文件夹
#ftp.get_dir('a/b/c',r'D:\a')
#下载到不存在的文件夹
#ftp.get_dir('a/b/c',r'D:\aa')
#上传到已经存在的文件夹
ftp.put_dir('b','a')
#上传到不存在的文件夹
ftp.put_dir('b','aa/B/')

希望本文所述对大家的Python程序设计有所帮助。

以下转自:http://blog.csdn.net/linda1000/article/details/8255771

Python中的ftplib模块

Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件

FTP的工作流程及基本操作可参考协议RFC959

ftp登陆连接

from ftplib import FTP #加载ftp模块

ftp=FTP() #设置变量
ftp.set_debuglevel(2) #打开调试级别2,显示详细信息
ftp.connect("IP","port") #连接的ftp sever和端口
ftp.login("user","password")#连接的用户名,密码
print ftp.getwelcome() #打印出欢迎信息
ftp.cmd("xxx/xxx") #更改远程目录
bufsize=1024 #设置的缓冲区大小
filename="filename.txt" #需要下载的文件
file_handle=open(filename,"wb").write #以写模式在本地打开文件
ftp.retrbinaly("RETR filename.txt",file_handle,bufsize) #接收服务器上文件并写入本地文件
ftp.set_debuglevel(0) #关闭调试模式
ftp.quit #退出ftp

ftp相关命令操作

ftp.cwd(pathname) #设置FTP当前操作的路径
ftp.dir() #显示目录下文件信息
ftp.nlst() #获取目录下的文件
ftp.mkd(pathname) #新建远程目录
ftp.pwd() #返回当前所在位置
ftp.rmd(dirname) #删除远程目录
ftp.delete(filename) #删除远程文件
ftp.rename(fromname, toname)#将fromname修改名称为toname。
ftp.storbinaly("STOR filename.txt",file_handel,bufsize) #上传目标文件
ftp.retrbinary("RETR filename.txt",file_handel,bufsize)#下载FTP文件

网上找到一个具体的例子:

#例:FTP编程
fromftplibimportFTP

ftp=FTP()
timeout=30
port=21
ftp.connect('192.168.1.188',port,timeout)#连接FTP服务器
ftp.login('UserName','888888')#登录
printftp.getwelcome()#获得欢迎信息
ftp.cwd('file/test')#设置FTP路径
list=ftp.nlst()#获得目录列表
fornameinlist:
print(name)#打印文件名字
path='d:/data/'+name#文件保存路径
f=open(path,'wb')#打开要保存文件
filename='RETR'+name#保存FTP文件
ftp.retrbinary(filename,f.write)#保存FTP上的文件
ftp.delete(name)#删除FTP文件
ftp.storbinary('STOR'+filename,open(path,'rb'))#上传FTP文件
ftp.quit()#退出FTP服务器

完整的模板:

#!/usr/bin/python
#-*-coding:utf-8-*-
importftplib
importos
importsocket

HOST='ftp.mozilla.org'
DIRN='pub/mozilla.org/webtools'
FILE='bugzilla-3.6.7.tar.gz'
defmain():
try:
f=ftplib.FTP(HOST)
except(socket.error,socket.gaierror):
print'ERROR:cannotreach"%s"'%HOST
return
print'***Connectedtohost"%s"'%HOST

try:
f.login()
exceptftplib.error_perm:
print'ERROR:cannotloginanonymously'
f.quit()
return
print'***Loggedinas"anonymously"'
try:
f.cwd(DIRN)
exceptftplib.error_perm:
print'ERRORLcannotCDto"%s"'%DIRN
f.quit()
return
print'***Changedto"%s"folder'%DIRN
try:
#传一个回调函数给retrbinary()它在每接收一个二进制数据时都会被调用
f.retrbinary('RETR%s'%FILE,open(FILE,'wb').write)
exceptftplib.error_perm:
print'ERROR:cannotreadfile"%s"'%FILE
os.unlink(FILE)
else:
print'***Downloaded"%s"toCWD'%FILE
f.quit()
return

if__name__=='__main__':
main()

⑷ 用shell脚本调用ftp命令,mget怎么取得动态文件

#!/usr/bin/sh

TZ=TZ+96
day1=`date+%Y%m%d`
TZ=TZ+72
day2=`date+%Y%m%d`
TZ=TZ+48
day3=`date+%Y%m%d`
TZ=TZ+24
day4=`date+%Y%m%d`
TZ=TZ
day5=`date+%Y%m%d`

SERVER=server
USERNAME=username
PASSWORD=password
ftp-n$SERVER<<EOF
user$USERNAME$PASSWORD
cdremote_path
lcdlocal_path
binary
verbose
get$day1.mat
get$day2.mat
get$day3.mat
get$day4.mat
get$day5.mat
close
quit
EOF

⑸ 批处理来完成FTP文件自动下载

    前几天笔者遇到一个需求,在windows平台下使用ftp来远程获取交换机扮毕漏的配置文件。鉴于每一次都需要在命令行里面手动输入,过程繁琐,于是想着使用脚本来完成这个重复性的工作,实现自动化。python的ftplib库也可以解决这个问题,但是笔者未来和其他bat脚本揉在一起,直接windows平台下使用批处理bat来完成。

    ftp -s可以指定包含ftp命令的文本文件,ftp启动后这些命令将自动运行。

主批处理文件:ftp_main.bat 

ftp命令批处理文件:ftp_task.bat,文件放置于D盘下。

    除了FTP之外,date修数敏改电脑日期,time修改电脑厅烂时间,echo ^G测试电脑声音。注意,“^G”是在命令行中使用ctrl + g输入的,可以使用echo ^G > test.txt来获取这个字符。

    最后这个脚本东凑西凑,界面如下:

⑹ shell脚本限时,用脚本实现ftp下载很多文件,每个文件最长5分钟,超过则停止下载该文件,继续下载另一个

我一般是用wget --timeout=seconds来做,脚本一行一个就行了。如果你电脑上有ncftpget,也可以用ncftpget -t seconds来做。

⑺ python写的ftp自动上传脚本,怎么判断重复的文件不重传呢size判断不够精确 有没有更好的方式跪求大神

这个没有特别准确的办法。你连SIZE检测也信不过。只有自己改程序了。

办法1:改写FTP程序,加一个hash确认。以前我这么做过。在python里可以轻松做一个FTP SERVER,加上自己做的MD5检测就可以了。

办法2:通过nc转发请求,在NC里设置一个检测。

办法3:如果文件不大,上传完再下载下来检测

办法4:采用自己传有的流水号,重新设置FTP SERVER,让它定期根据流水号,生成检验码,然后你在客户端定期下载这个文件。 这个方法过去在电信系统里经常使用。防出错效果很好。

⑻ shell定时下载ftp文件并重命名放到指定文件夹

到你执行这个sh的用户的mail文件里面去看日志,比如你是用的root用户,那么你可以打开/var/mail目录下的root文件,里面会记录3点钟crontab的执行情况。

一般来说问题2个方面:
1.这个sh本身不对,你可以单独执行这个sh来调试
2.sh缺少执行权限

有问题可以追问,希望对你有帮助

⑼ 请教DOS高手,用批处理实现ftp自动下载

@echooff
setftpulr=填写ftp地址
setftpuser=填写ftp用户
setftppwd=填写ftp密码
setftpport=填写ftp端口,默认21

echoopen%ftpulr%%ftpport%>openFtp.txt
echo%ftpuser%>>openFtp.txt
echo%ftppwd%>>openFtp.txt
echopromptoff>>openFtp.txt
echomget*>>openFtp.txt
echobye>>openFtp.txt
echoTransportdata......
ftp-s:openFtp.txt
delopenFtp.txt
pause

热点内容
android局域网视频 发布:2024-10-08 18:35:29 浏览:691
java访问私有变量 发布:2024-10-08 18:34:50 浏览:84
vivo锁屏壁纸缓存在哪 发布:2024-10-08 18:34:49 浏览:535
insta360oner配多大的存储卡 发布:2024-10-08 18:34:40 浏览:212
csgo和永劫无间哪个配置要求高 发布:2024-10-08 18:20:47 浏览:48
43数据库 发布:2024-10-08 18:19:20 浏览:816
svn服务器不能访问 发布:2024-10-08 18:18:36 浏览:984
压缩面膜多少钱 发布:2024-10-08 18:18:01 浏览:539
徐州少儿编程培训机构 发布:2024-10-08 17:52:29 浏览:389
c语言常用函数大全 发布:2024-10-08 17:46:33 浏览:410