服务器文件每天备份重新命名,定时备份服务器文件至本地电脑

你有么有遇到过以下情况:

1 写的脚本忘记保存,然后苦逼地再写一遍

2 脚本不小心或者小心地删掉了,但后来又发现很有用,依然苦逼地再写一遍

3 实验室的服务器炸了,写的脚本全没了

一般情况下,第三种情况不会遇到,但前两种你肯定遇到过,当然你很少写脚本除外。

如果遇到过前两种情况,脚本的本地备份是不错选择

原理

利用 scp 实现远端和本地之间的文件传输

在服务器中获取需要备份的文件目录,并保存为log文件

在本地使用scp获取这个log文件,有了这个文件,本地就知道需要备份哪些服务器的文件至本地了

分别将获取log文件的脚本(位于服务器上)和执行备份的脚本(位于本地windows)的脚本设置定期执行(并且是有序的执行,因为要先有log文件再进行备份),这样就实现了定期备份脚本的功能

备份的文件夹用当日日期来命名,如果你备份周期比较短,可能会用到时分秒来命名了

代码实现

1 获取需要备份的文件目录

该脚本位于服务器

cat Backup_scripts.R

library("optparse")

option_list = list(make_option(c("-f", "--folder"), type = "character", default = NULL, help = "Folder to be backup"))

args

if(is.null(args$folder))

args$folder = "/sibcb2/bioinformatics2/wangjiahao"

setwd(args$folder)

cat("Collecting file path ...\n")

Folders = list.files(args$folder)

xFolders = Folders[Folders != "software"]

patterns = c("\\.R$", "\\.py$", "\\.sh$", "\\.wdl$")

getFile

res = sapply(patterns, function(x) list.files(folder, x, recursive = TRUE))

return(paste0(folder, "/", as.character(unlist(res))))

}

files = as.character(unlist(sapply(xFolders, getFile)))

date = gsub("-", "_", Sys.Date())

out = paste0("/sibcb2/bioinformatics2/wangjiahao/code/Backup/", date, ".txt")

write.table(files, file = out, sep = "\n", quote = FALSE, col.names = FALSE, row.names = FALSE)

cat("Done!\n")

用法

由于脚本里面指定了默认的需要备份的路径,所以可以直接运行。如果需要备份其他目录(例如 xxxx),直接在命令上加个参数就行了:

Rscript Backup_scripts.R --folder xxxx

倒数第三行的out变量是log文件的保存位置,需要自行修改,懒得写成参数传递的形式了

生成的log文件:

head 2020_12_10.txt & wc -l 2020_12_10.txt

288 2020_12_10.txt

code/CommonData/Build_ENSG.R

code/function/buildTabix.R

code/function/fmrNormalization.R

code/function/Oncotator_FG.R

code/function/PathwayEnrichment.R

code/function/workflow.R

code/myscript/Backup_scripts.R

code/myscript/copy_script_v1.R

code/myscript/copy_script_v2.R

code/myscript/copy_script_v3.R

本地获取log文件,并执行备份

该脚本位于本地

cat Backup_scripts.R

setwd("G:/Methylation/Backup")

userName = "wangjiahao"

serverIP = "xx.xx.x.xx"

date = gsub("-", "_", Sys.Date())

masterFolder = paste0(getwd(), "/", date)

outFolder = paste0(masterFolder, "/", userName)

suppressWarnings(dir.create(masterFolder))

suppressWarnings(dir.create(outFolder))

remoteLogFile = paste0("/sibcb2/bioinformatics2/wangjiahao/code/Backup/", gsub("-","_",Sys.Date()), ".txt")

cmd = paste0("scp ", userName, "@", serverIP, ":", remoteLogFile, " ", masterFolder)

system(cmd)

logFiles = readLines(paste0(masterFolder, "/", date, ".txt"))

remoteFiles = paste0("/sibcb2/bioinformatics2/wangjiahao/", logFiles)

for(i in 1:length(remoteFiles)){

remoteFile = remoteFiles[i]

localFolder = paste0(outFolder, "/", dirname(logFiles[i]))

suppressWarnings(dir.create(localFolder, recursive = TRUE))

cmd = paste0("scp ", userName, "@", serverIP, ":", remoteFile, " ", localFolder)

system(cmd)

}

其中,用户名和服务器IP需要自定义

使用过程:

G:\Script\CMD>Rscript G:/Script/R/Backup_script.R

2020_12_10.txt 100% 10KB 2.0MB/s 00:00

[1] 0

Build_ENSG.R 100% 394 55.3KB/s 00:00

buildTabix.R 100% 961 235.9KB/s 00:00

fmrNormalization.R 100% 889 174.2KB/s 00:00

Oncotator_FG.R 100% 13KB 1.7MB/s 00:00

PathwayEnrichment.R 100% 27KB 2.7MB/s 00:00

workflow.R 100% 2118 518.4KB/s 00:00

Backup_scripts.R 100% 933 228.4KB/s 00:00

copy_script_v1.R 100% 2478 127.7KB/s 00:00

copy_script_v2.R 100% 2466 65.3KB/s 00:00

copy_script_v3.R 100% 1258 32.3KB/s 00:00

....

我不插网线传输速度也可以达到几M/s,每个脚本啪的一下就传好了,很快啊

接下来实现自动备份!

定时任务设置

需要同时设置本地和远程端的定时任务

1 本地设置

2 远程端设置

在搜索目录的时候,一定要把软件安装目录给去掉,因为里面有很深的目录和很多的不是自己的脚本,检索会消耗很多时间,例如conda的目录。

真的挺实用的~

2021-06-08

后来想到更简单且高效的方法:

终端服务器可以选择每一小时或两小时生成一个日志文件,因此日志文件命名时要加上小时的单位(R语言:strsplit(gsub("[ -]", "_", Sys.time()), ":")[[1]][1])。

此外,还有一个问题,频繁的备份会产生很多日期相同小时不同的日志文件,那么本地应该如何选择备份哪一个呢?当然,我们应该备份最近生成的那个日志文件对应的脚本,但是本地电脑是不知道终端最近备份的是哪个日志文件的。解决办法也很简单,同样的原理:在终端每次备份时把备份的日期及小时保存在另外一个文件里,这个文件的名字是可以唯一的,因为它的内容每次都会被覆盖更新。这样,我们在本地首先获取这个包含最近备份时间的日志文件内容,又因为最近备份时间也是包含待备份脚本路径的日志文件的命名规则,因此,根据这个时间,我们可以准确获取最近生成的那个文件路径日志文件并进行下一步的备份。

之所以说更简单高效,是因为之前是在电脑每次开机时自动备份一次,后来想想这并不是最好的备份方法。现在我改进了备份方法:因为之所以需要备份是因为你想避免你打开了终端软件(我使用的是Moba Xterm)连接服务器后对文件造成不可挽回的修改,因此在打开Moba的时候进行备份显然是更有效的。实现这个想法也不难,就是在打开Moba的同时进行服务器文件备份,同样是使用windows的cmd功能:

start D:\MobaXterm\MobaXterm_Personal_20.6.exe & Rscript G:/Script/R/Backup_script.R

命名为start_Moba.cmd,可以直接单击这个文件就可以同时实现打开Moba和文件备份, 为了更方便,可以将这个文件固定到任务栏或 Windows 自定义cmd命令。

这样只会在打开Moba时才会进行备份,而不是每次开机时都要弹出备份的窗口,是不是前者更简单高效呢~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

河流Shader

原地址:http://www.unity蛮牛.com/blog-2321-336.html Shader "Custom/TextureEffect" {Properties { _MainTint("Diffuse Tint",Color) (1,1,1,1)_MainTex ("Base (RGB)", 2D) "white" {}_ScrollXSpeed("X Scrol…

化学到底有多难难难难!为了让学生搞懂化学,竟然...

▲ 点击查看提到化学,大家脑子里都会想到什么呢?枯燥的化学式?还是难背的元素周期表?还是让人头疼的化学考试题?在由NHK,NHK Educational Corp、西南德国广播(SWR)、卡塔尔半岛电视台…

面试题--特别是字节对齐

来源&#xff1a;http://www.cnblogs.com/Braveliu/archive/2013/01/04/2844757.html 【1】设置或者清除某位。 示例代码如下: 1 #include<iostream>2 using namespace std;3 4 #define BIT3 (0x1<<3)5 6 void Set_bit3(int &a)7 {8 a|BIT3;9 } 10 11…

配置基于python的VIM环境

配置基于python的VIM环境 安装插件管理工具 为防止过多插件管理的麻烦&#xff0c;首先安装vim的插件管理工具Vundle。vundle本身的github软件已经有相关的中文文档&#xff0c;地址如下&#xff1a; vundle官方中文文档 复制其配置&#xff0c; set nocompatible …

Npgsql 6.0.2 发布,赶紧升级!!!

❝PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;是以加州大学计算机系开发的 POSTGRES&#xff0c;4.2版本为基础的对象关系型数据库管理系统。POSTGRES 的许多领先概念只是在比较迟的时候才出现在商业网站数…

Android之中获取应用程序(包)的信息-----PackageManager的使用(一)

转载&#xff1a;http://blog.csdn.net/qinjuning/article/details/6867806 本节内容是如何获取Android系统中应用程序的信息&#xff0c;主要包括packagename、label、icon、占用大小等。具体分为两个 部分&#xff0c;计划如下&#xff1a; 第一部分&#xff1a; 获取应用程…

dnf公共频道服务器不稳定已从初始化状态,DNF公共频道跨区列表 组队连不上必看...

DNF公共频道组队连接不上&#xff1f;在大转移版本之后很多玩家表示DNF公共频道不能组队&#xff0c;实际上这个和大家所在的DNF公共频道跨区有关&#xff0c;位于同一个跨区的玩家之间才能够组队&#xff0c;这里是一份DNF公共频道跨区列表&#xff0c;除此之外还有公共频道的…

JDK中DNS缓存的分析

在JAVA中使用InetAddress.getByName(String host) 方法来获取给定hostname的IP地址。为了减少DNS解析的请求次数&#xff0c;提高解析效率&#xff0c;InetAddress中提供cache来缓存解析结果。 下面就此cache进行简单的分析&#xff1a; 该缓存实现比较简单&#xff0c;巧妙的利…

了解开源文化

开放源码软件运动是计算机科学领域的一种文化现象&#xff0c;源自***对智慧成果共享、自由的追求。开源运动发展到现在&#xff0c;这种能够积极促进人类文明发展的文化已经***到信息、教育、健康等领域&#xff0c;融入了哲学范畴。开放源码运动的史前史包括了整个Unix&#…

jquery验证手机号码和邮箱地址例子

为什么80%的码农都做不了架构师&#xff1f;>>> //jquery验证邮箱 function checkSubmitEmail(){ if($("#email").val()""){ $("#confirmMsg").html("邮箱地址不能为空&#xff01;"); $("#email").focus()…

.NET 6新特性试用 | 可写JSON DOM API

前言我们常用JSON的方式&#xff0c;是将类对象序列化/反序列化:var user new User { Name "My IO" }; var json JsonSerializer.Serialize(user); var newUser JsonSerializer.Deserialize<User>(json);而通过System.Text.Json提供的可写JSON DOM API&…

网页设计的css样式,网页设计引入CSS样式的五种方式_css

一、使用STYLE属性将STYLE属性直接加在个别的元件标签里&#xff0c;&#xff1c;元件(标签) STYLE”性质(属性)1: 设定值1; 性质(属性)2: 设定值2; …}例如&#xff1a;&#xff1c;TD STYLE”COLOR:BLUE; font-size:9pt; font-family:”标楷体”; line-height:150%&#xff1…

C#薪水和前途

这1&#xff0c;2年有更新简历&#xff0c;一直在看市场行情&#xff0c;最近这么多年在聊C#的薪水&#xff0c;我也说说我看到的情况&#xff0c;只限上海&#xff1b; 仅供大家参考&#xff1b; 高端职位&#xff1a; 纯技术&#xff0c;不谈管理&#xff0c; 一般是架构师职…

Heritrix 3.1.0 源码解析(十一)

上文分析了Heritrix3.1.0系统是怎么添加CrawlURI curi对象的&#xff0c;那么在系统初始化的时候&#xff0c;是怎么载入CrawlURI curi种子的呢&#xff1f; 我们回顾前面的文章&#xff0c;在我们执行采集任务的launch指令的时候&#xff0c;实际会调用CrawlController对象的v…

令人难忘的初吻描写......

1 我可以把你删了吗&#xff0c;我没有内存了&#xff08;via.豆瓣陈皮&#xff0c;侵删&#xff09;▼2 黑社会平时都在干些什么&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 老师头秃是有原因的▼4 是谁炸了珍珠港&#xff1f;&#xff08;素材来源网络&…

Android之获取应用程序(包)的大小-----PackageManager的使用(二)

http://blog.csdn.net/qinjuning/article/details/6892054 通过第一部分 << Android中获取应用程序(包)的信息-----PackageManager的使用(一) >>的介绍&#xff0c;对PackageManager以及 AndroidManife.xml定义的节点信息类XXXInfo类都有了一定的认识。 本部分的内…

eclipse创建maven多模块项目(单个类似)

2019独角兽企业重金招聘Python工程师标准>>> 1、下载安装maven 1.1、下载 注意&#xff1a;maven的版本&#xff0c;要根据你的jdk版本来下载。要不会安装失败&#xff0c;提示版本问题哦 Jdk 对应的maven版本如图:&#xff08;官网地址&#xff1a;http://maven.ap…

如何通过 C# 判断一个 路径 是本机还是远程 ?

咨询区 David Boike请问在 C# 中是否有好的方式判断 path 是在本地还是在远程,我想到了用 UNC 属性来判断&#xff0c;比如下面的代码&#xff1a;new Uri(path).IsUnc但这代码也有一定的问题,它会误判下面的 path 格式。\\machinename\sharename\directory \\10.12.34.56\shar…

交换系统接媒体服务器,基于软交换的媒体服务器的设计与实现

摘要&#xff1a;随着VoIP(Voice over Internet Protocol,俗称网络电话)的迅速发展,单纯的语音业务已经无法满足用户和市场的需求,因此一种具有多媒体业务的VoIP的方案——IP媒体服务器因此产生了。它可以提供更具个性化和差异性的增值业务,而且可以为提供商带来更高的利润。国…