/

linux如何快速备份

我现在使用的是deepin linux,自带备份功能,但总感觉这个备份有点。。。。

Talk is cheap,show me the screenshot。

直接看图吧,备注现在时间2020-02-13(

看这时间多悠久

好像从第一次注册完账号开启自动备份后就没开过。。。

我这还算好的,最起码有个界面,那些用其他发行版的大牛们怎么办啊,全盘备份?没这必要吧,只要备份重要配置文件就够了,再说全盘备份要是碰上Linus那种只用固态硬盘的硬盘就遭殃了。

突然想起来Linux有批处理功能,于是打开vim和Google,开工!

编写程序

基本思路

这里说一下备份思路

  1. 把重要文件(夹)复制到临时目录(因为是机械硬盘无所谓寿命)
  2. 打包成zip
  3. 移动到u盘里

第一个功能:计时

这功能真的是强迫症福音啊,废话少说放码:

1
2
3
4
5
6
start=$(date "+%s")	#记录开始时间
#这里运行代码
now=$(date "+%s") #记录结束时间
time=$((now-start)) #计算用时
echo "time used:$time seconds" #输出时间
#echo $date

就这样一个计时功能出来了,果然比某某些编程语言简单,像某语言还要引用time(逃

对了,科普一下,shell里输出是

1
2
echo "exampleString"	#输出文字
echo $someVar #输出变量

我测试了一下,没有代码时候输出0s,还是挺准的 :D

建立备份临时文件夹

此步在硬盘中建立临时备份文件夹,命名为当前时间

建立文件夹应该都会吧,所以直接上代码

1
2
date=$(date +%Y%m%d%H%m%s)	#获取时间
mkdir /media/lakphy/DATA/baks/$date #建立文件夹

建立重要文件夹名单

此步建立一个数组(我习惯将列表说成数组,意义相同,以后不做解释),里面放有重要文件(夹)通报(划掉)名单

1
2
3
4
5
6
7
8
copyPath=(	#这是建立数组的代码
'/home/lakphy/lakphy/golang'
'/home/lakphy/lakphy/py'
'/home/lakphy/lakphy/nodejs'
'/home/lakphy/Downloads'
'/media/lakphy/DATA/downloads'
'/home/lakphy/Desktop'
) #这是我的重要文件目录,仅示例使用

复制内容到临时备份文件夹

这里利用循环遍历重要文件(夹)名单复制,这个操作我们在学习Python时候应该都学过

1
2
3
4
5
for p in ${copyPath[@]}	#for循环
do #循环开始符
echo 'copying '$p #输出复制信息
cp -r $p /media/lakphy/DATA/baks/$date #Linux cp命令玄学复制,速度贼快
done #循环结束符

压缩

1
2
3
pathname='/media/lakphy/DATA/baks/'$date	#备份文件夹路径  date是我们之前定义的时间
zipname='/media/lakphy/DATA/baks/'$date #压缩文件路径和名字
zip -r $zipname $pathname #压缩命令

移动到批处理程序所在目录

mv命令,这个比较简单,不解释

完整代码

来看下完整代码

codes

1
2


运行

保存为backup.sh

如果程序在电脑上的话,直接双击或者命令:

1
./backup.sh

如果在外部存储器上,只能在命令行运行,命令只能是:

1
bash backup.sh

bash意思是解释器为bash,至于为什么是bash不是shell,这个我也不懂,我谷歌的时候写的shell啊。。。但shell真的运行不了,不信试试:

1
shell backup.sh

至于内部外部存储器区别,我觉得可能是外部存储器文件系统不是ext4不能加可执行权限问题

我运行了一下,速度不错,比直接复制快,毕竟cp命令玄学复制,430s完成。