Linux+Shell获取及拷贝最新备份数据

前面我们介绍了一些脚本配置,今天我们介绍一下,使用Shell脚本如何将指定目录下的最新的文件拷贝到指定目录,我们拷贝前的文件都是压缩文件,而且以备份的日期进行命名的,我们今天介绍两种方式,第一种就是通过文件的最后一次修改时间来判断移动,第二种就是通过获取文件名来进行判断拷贝,具体见下:

我们首先说一下备份脚本,因为我们的源文件是压缩文件,所以介绍一下备份脚本文件;

我们是将/OAFS目录下的ABC目录进行压缩,然后以文件名+日期进行命名

#!/bin/bash
SOURCE=/OAFS/WEAVER    
TARGET=/OAFS/WEAVER_BACKUP    
CPEXEC=$(which cp)    
MKDIREXEC=$(which mkdir)    
CURDATE=$(date +%Y-%m-%d)    
BAKDIRTMP=${SOURCE%*/}    
BAKDIRNAME=${BAKDIRTMP##*/}$CURDATE    
BASEDIR=${BAKDIRTMP%/*}    
HOSTNAME=`hostname`

if [ ! -d "$SOURCE" ]; then     
  echo "$(date +%Y-%m-%d_%H:%M:%S) - The source $SOURCE is not existed you specified" >>/var/log/${BAKDIRTMP##*/}.log     
     exit 2  
 fi
if [ ! -d "$TARGET" ]; then      
 echo "$(date +%Y-%m-%d_%H:%M:%S) - The target $TARGET is not existed you spec   
  ified" >>/var/log/${BAKDIRTMP##*/}.log       
   exit 22   
  fi
cd $TARGET && tar zcf $HOSTNAME.${BAKDIRNAME}.tar.gz -C $BASEDIR ${BAKDIRTMP##*/}

if [ "$?" -ne 0 ]; then  
 echo "$(date +%Y-%m-%d_%H:%M:%S) - Backup directory: $SOURCE to $TARGET/${BAKDIRNAME}.tar.gz is failed" >>/var/log/${BAKDIRTMP##*/}.log   
  else    
   echo "$(date +%Y-%m-%d_%H:%M:%S) - Backup directory: $SOURCE to $TARGET/${BAKDIRNAME}.tar.gz is successful" >>/var/log/${BAKDIRTMP##*/}.log  
 fi   
 
  exit 0

压缩后

接下来就是拷贝了,我们首先通过最后一次文件修改日期来判断进行最新的文件拷贝

ls -lt $LOCALBAKDIR | awk {‘print $9‘} |grep -v ^$ |head -n 1

我们将执行命令编写成脚本执行

#!/bin/bash
LOCALBAKDIR="/OAFS/WEAVER_BACKUP"
TARGET="/OAFS"
function get_last_targz() {
echo $(ls -lt $LOCALBAKDIR | awk {‘print $9‘} |grep -v ^$ |head -n 1)
}
function copy() {
cp $LOCALBAKDIR/$(get_last_targz) $TARGET
}
copy
echo "ok"

开始执行

接下来我们使用获取文件名命名来判断最新文件的拷贝

ls | awk ‘{match($0,/.{4}-.{2}-.{2}/,a);b[a[0]]=$0;y=a[0]>y?a[0]:y}END{print b[y]}‘

我们同样编辑脚本执行

#!/bin/bash
LOCALBAKDIR="/OAFS/WEAVER_BACKUP" 
TARGET="/OAFS"
function get_last_targz() {  
   echo $(ls  $LOCALBAKDIR | awk ‘{match($0,/.{4}-.{2}-.{2}/,a);b[a[0]]=$0;y=a[0]>y?a[0]:y}END{print b[y]}‘)
} 
 function copy(){
cp   $LOCALBAKDIR/$(get_last_targz) $TARGET
}  
 copy  
 echo "OK"

开始执行

时间: 2024-12-15 21:08:29

Linux+Shell获取及拷贝最新备份数据的相关文章

Linux+Shell获取及拷贝最新数据到远程设备

我们远程一般拷贝数据都是创建了共享秘钥,这样拷贝的话就不用输入密码了,具体可以参考我前面的文章"Linux 下实现SSH互信--http://gaowenlong.blog.51cto.com/451336/1856951": 我们将通过脚本获取LOCALBAKDIR目录下的文件的最后一下修改时间,将最新的修改时间的问题远程拷贝到RMT_HOST #!/bin/bash LOCALBAKDIR=/OAFS/WEAVER_BACKUP RMTRESTDIR=/OAFS RMT_HOST=

linux shell简单实现数据库自动备份

以centos系统为例,实现数据库自动备份.1.写一个shell: 12 #! /bin/bashmysqldump -cp --user=root --password='123' dbName | gzip > ~/db/dbName-`date +%Y%m%d%H`.sql.gz ; 上述shell中,root是备份时使用的用户名,123是密码,dbName是要备份的数据库的名称.把这个文件放在用户目录下,保存路径为:~/db/dbBackup.sh 保存结束后添加执行权限:chmod a

Linux Shell脚本之Gitlab远程备份

注:Gitlab是一个git服务程序,有web图形界面和一系列管理工具,具体详细介绍可以Google it. 这一篇可以说是上一篇<Linux Shell脚本之Atlassian confluence远程备份方法>的姊妹篇.其说明和原理是和上一篇是一样的,其核心原理都是core dump.scp.ssh和find+rm,但也有不同. 1.Gitlab本身提供了较好的备份方法,只是一个命令那么简单,并且它也支持远程备份(远程存储和云存储),例如它可以存储到aws的s3上. 2.本脚本运行在Git

Linux shell crontab expdp 定时任务逻辑备份

创建sh脚本 [[email protected] ~]$ vi logicbackup.sh 添加脚本内容 #!/bin/sh # ################################################################## # Powered by Ironfo # ################################################################## # Oracle Environment settin

Linux Shell脚本之利用mysqldump备份MySQL数据库(详细注解)

设计该脚本的一些设计.编写考虑: 该脚本适用于编译安装mysql和通过yum或apt-get等安装方式 该脚本可以反复执行,不会重复覆盖数据 可增加,删除N天前的备份以节省磁盘空间 充分利用mysqldump的自带锁表功能.刷新日志.复制等功能 利用mysqldump命令备份MySQL数据库的脚本(不带注释版,适合生产环境使用) #!/bin/bash MYSQLDBUSERNAME=root MYSQLDBPASSWORD=password MYSQBASEDIR=/usr/local/mys

Linux下MySQL定时按日期备份数据

一.使用mysql内置命令 mysqldump Usage: mysqldump [OPTIONS] database [tables] mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] mysqldump [OPTIONS] --all-databases [OPTIONS] 可以看到能备份全部的数据库,指定的数据库,指定数据库中的表 mysqldump -uUsername -pPassword Database > /va

linux shell 获取路径中指定信息

file=/home/data/hunan/hn.2015-9-11.log.bbk file_log_name=`basename $file`  ## file_log_name 就等于 hn.2015-9-11.log.bbk file_test=`basename $file .bbk` ## file_test 就等于 hn.2015-9-11.log no_file_path=${file%/*}   ### 获取文件所在的路径  即 /home/data/hunan city=${

宝塔Linux面板 使用阿里云OSS备份数据

看图说明:<ignore_js_op><ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op>

Linux shell 获取上上月月末日期

v_curr_rq=`date +%Y%m%d` v_rq=`date -d "yesterday" +%Y%m%d` v_lm=`date +%Y%m01` v_lm_rq=`date -d "${v_lm} last day" +%Y%m%d` v_llm_rq=`date -d "${v_lm} last month last day" +%Y%m%d` #当前日期 echo ${v_curr_rq} #昨天日期 echo ${v_rq}