我用师兄的脚本从ENA上下载fastq数据----https://github.com/Yuanting-Zheng/wonderful_download 但是由于我下载的数据量很大,而服务器又不能联网,所以只能先下载到自己的电脑然后再上传到服务器上。这样就会出现一个问题,如果我不及时把下载下来的文件上传到服务器上的话,我电脑的磁盘空间显然是不够的,下面讲怎么用python定时实现下载完成后的文件传到服务器并同时删除上传完成的文件。
1.批量上传下载完成的数据并删除
#4-successful_upload.py----该脚本用于把文件上传到服务器
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
path='/Users/mac/Desktop/test/PRJNA437324' #下载完成后存放文件存放目录
dirs=os.listdir(path)
dirs.sort() #排序
#定义一个计算path目录下有多少文件的函数。
def countFile(dirs):
count=0
for file in dirs:
if os.path.isfile(os.path.join(path,file)):
count +=1
return count
#当前文件夹中的文件数大于3时候,把文件夹中的文件上传到服务器,并删除该文件(大于3说明已经有文件下好了)。
#注:我的下载是不间断进行的,所以需要确定文件下载完全后才传到服务器。
countFile(dirs)
while countFile(dirs)>3:
new_dirs=dirs[:len(dirs)-3]
#上传到服务器,并删除该文件
for new_file in new_dirs:
os.system('scp '+path+'/'+new_file+' xx@xx.xx.xx.xx:/data3/maize_data/PRJNA437324')
#scp命令,为了上传文件到服务器可以不输入服务器密码,请参考我师兄的简书:https://www.jianshu.com/p/306cb0c3508d
os.system('rm -f '+path+'/'+new_file)
2.定时运行上述脚本
#5-run_regularly.py:该脚本实现的是每间隔多少时间运行上述脚本。(确保能源源不断的把下载完成的文件传到服务器)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os,time
path0='/Users/mac/Desktop/test/'
while True:
os.popen('python '+path0+'/4-successful_upload.py')
time.sleep(3600) #3600秒的时间间隔。
3.测试
#添加可执行权限
chmod u+x 4-successful_upload.py 5-run_regularly.py
#测试仅运行脚本4,实际运行时候只需要运行脚本5,实际运行的命令如下:
nohup ./5-run_regularly.py >run_regularly.log &
#注:如果下载完成记得在后台把这个命令给kill掉。
(1)正在下载中的数据(有gz和gz.aspx代表正在下载)
file
(2)下面为执行脚本4的结果,很显然已经成功实现了前面我所要的结果。
自己电脑:
file
服务器端:
file本文由博客一文多发平台 OpenWrite 发布!
网友评论