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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux+Shell获取及拷贝最新备份数据相关的知识,希望对你有一定的参考价值。

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"

技术分享

开始执行

技术分享

本文出自 “高文龙” 博客,谢绝转载!

以上是关于Linux+Shell获取及拷贝最新备份数据的主要内容,如果未能解决你的问题,请参考以下文章

VBS获取指定目录下最新文件拷贝然后以当前日期命名

linux 下shell脚本备份文件

Linux+shell管理员的好帮手--批量解压缩

linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)

Linux下的数据备份工具rsync

Linux13 shell函数数组及awkawk中的数组