以下是shell自动备份用的:

主要功能:

1)将pathSrc目录中的文件拷贝到pathDst目录中去。

  具体步骤:先查询源目录和目标目录中的文件,分别存在fileSrc和fileDst中。 -> 来两个循环,比较。不在fileDst的就拷贝过去。再判断一下是否拷贝成功。

2)将pathSrc中的文件保留180天。

  具体步骤:先查出源目录中大于180天的文件(就是那句find),然后删除。  

#!/bin/bash

v_time=`date "+%Y-%m-%d %H:%M:%S"`
bakstr="[Start auto backup gitlab data:]"${v_time}
logfile="/home/localgitlab/test/auto_back.txt"
echo >> $logfile
echo $bakstr >> $logfile pathSrc="/home/localgitlab/disk_new/backup"
filesSrc=$(ls $pathSrc) pathDst="/media/localgitlab/a1df1b08-ae43-45ea-8067-994497738cb2/backups"
filesDst=$(ls $pathDst) nSrcFileCount= ### Backup file: The file that determines the original path is not in the target path,
### and is not copied.
for filename in $filesSrc
do
nSrcFileCount=$(( $nSrcFileCount + ))
need_copy="yes"
for dstfile in $filesDst
do
if [ $filename == $dstfile ];then
need_copy="no"
fi
done if [ $need_copy == 'yes' ];then
echo $filename " need backup" >> $logfile
strCompletePath=${pathSrc}'/'${filename}
cp $strCompletePath $pathDst
if [ $? -eq ]; then
echo "copy file success" >> $logfile
else
echo "copy file fail" >> $logfile
fi
else
echo $filename " not need backup" >> $logfile
fi
done echo "Src dir have file count:" $nSrcFileCount >> $logfile ### Keep only data within days
delSrc=$(find $pathSrc -type f -mtime +)
for delfilename in $delSrc
do
echo "Need delete file: " $delfilename >> $logfile
rm -f $delfilename
if [ $? -eq ]; then
echo "delete file success" >> $logfile
else
echo "delete file fail" >> $logfile
fi
done

补充:

1、有需要的话可以用crontab假如到自动运行中去。如果涉及到源目录和目标目录访问权限的问题,可能需要用root加入crontab。

1)crontab -l:列出所有自动运行的脚本

2)crontab -e:将要执行的脚本假如到自动运行中去

2、关于find命令:

find pathname -options [-print -exec -ok] 
pathname    find命令所查找的目录路径。 
-print      find命令将匹配的文件输出到标准输出。 
-exec       find命令对匹配的文件执行该参数所给出的shell命令。 
-ok 和- exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行. 
1. -name   按照文件名查找文件 
2. -perm   按照文件权限来查找文件 
3. -mtime -n +n   按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。 
4. -newer file1  查找更改时间比文件file1新的文件。 
5. -type   查找某一类型的文件 
  b - 块设备文件。 
  d - 目录。 
  c - 字符设备文件。 
  p - 管道文件。 
  l - 符号链接文件。 
  f - 普通文件。 
6. 使用-size选项 ,按文件的大小查找文件的

linux 下shell脚本备份文件的更多相关文章

  1. linux下shell脚本执行jar文件

    最近在搞一个shell脚本启动jar文件个关闭jar文件的东东.搞得我都蛋疼了.今天晚上终于弄好了 话说,小弟的linux只是刚入门,经过各方查资料终于搞定了.话不多说,下面开始上小弟写的shell脚 ...

  2. linux下shell脚本学习

    在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.您可以通过使用shell使大量的任务自动化,shel ...

  3. linux下shell脚本启动jar包

    本文采用的jar包是通过idea下maven打包的springboot项目. 写这个shell脚本是为了在linux下方便启动jar包时不用输入太多的shell命令,将启动脚本的一系列shell命令整 ...

  4. Linux 下Shell 脚本几种基本命令替换区别

    Shell 脚本几种基本命令替换区别 前言:因为工作需要,需要编写 shell script .编写大量 shell script 时,累计了大量经验,也让自己开始迷糊几种函数输出调用的区别.后面和 ...

  5. Linux下Shell脚本运行程序不输出日志到终端

    使用: 脚本路径/脚本名 >/dev/>& 说明: 可以简单的理解/dev/null是Linux下的回收站 >默认是把标准输出重定向 2>&1是把出错输出也定向 ...

  6. Linux下shell脚本实现mongodb定时自动备份

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...

  7. linux下shell 脚本 中windows换行符换成linux换行符

    sed -i 's/\r//' filename window下默认是 \r\n linux下是\n unix下是\r

  8. linux下shell脚本执行方法及exec和source命令

    exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两 ...

  9. Linux下shell脚本中信号捕获和函数练习脚本之ping一个网段

    该脚本主要的目的是练习在Linux bash脚本中捕获信号,顺便练习一下函数的使用,还有就是终止一个正在运行的程序后,该程序打开的文件的后续处理问题等等!脚本功能:  ping一个网段内的IP,检测哪 ...

随机推荐

  1. bzoj1014 火星人 (hash+splay+二分答案)

    求公共前缀的问题可以用hash+二分来解决,但这个是动态的,所以我们用平衡树来维护区间的hash值 复杂度$O(mlog^2n)$ #include<bits/stdc++.h> #def ...

  2. BZOJ 1370: [Baltic2003]Gang团伙(luogu 1892)(种类并查集)

    题面: bzoj题面有误,还是看luogu的吧 https://www.luogu.org/problemnew/show/P1892 题解: 种类并查集.. 因为有敌人的敌人是朋友这个条件,所以需要 ...

  3. 洛谷P1896 互不侵犯

    又是一道状压DP求方案数的题... 多了一个放k个的限制,于是我们把数组多开一维. f[i][j][k]表示前i行放了j个,第i行状态为k的方案数. 然后老套路DFS转移,这次要多记录一个cnt表示上 ...

  4. 【洛谷P1082】同余方程

    题目大意:求关于 \(x\) 的同余方程 \[ax \equiv 1 \pmod {b}\] 的最小正整数解. 题解:exgcd 板子题. 代码如下 #include <bits/stdc++. ...

  5. openvpn部署账号密码登录

    1.开启服务器端路由转发功能: 修改配置文件/etc/sysctl.conf中 net.ipv4.ip_forward = 0 改为 net.ipv4.ip_forward = 1 [root@nod ...

  6. Django 自定义过滤器

    设定自定义过滤器之前要现在配置文件内把自己项目名在 INSTALLED_APPS 内导入 #已安装的django应用 INSTALLED_APPS = [ 'django.contrib.admin' ...

  7. 斯坦福大学公开课机器学习:advice for applying machine learning | model selection and training/validation/test sets(模型选择以及训练集、交叉验证集和测试集的概念)

    怎样选用正确的特征构造学习算法或者如何选择学习算法中的正则化参数lambda?这些问题我们称之为模型选择问题. 在对于这一问题的讨论中,我们不仅将数据分为:训练集和测试集,而是将数据分为三个数据组:也 ...

  8. JS with

    <script type="text/javascript"> function Dog(){ this.type="dog"; this.tail ...

  9. (Bash博弈 大数) 51nod1068 Bash游戏 V3

    1068 Bash游戏 V3   有一堆石子共有N个.A B两个人轮流拿,A先拿.每次拿的数量只能是2的正整数次幂,比如(1,2,4,8,16....),拿到最后1颗石子的人获胜.假设A B都非常聪明 ...

  10. 爬虫之requests请求库

    介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内容下 ...