shell怎么备份文件

shell怎么备份文件,第1张

Linux shell:

备份/home/folder目录下的所有内容,打包保存为/tmp/folder.tar.gz:

cd /home/folder

tar cvzf /tmp/folder.tar.gz *

备份恢复内容到/home/folder目录:

cd /home/folder

tar xvzf /tmp/folder.tar.gz

每次备份满25个后再删除:你每次备份是不同的文件名吗?

如果计算个数:

num=${ls 文件名 |wc -l } //就可以计算

if [$num -gt 25] //加条件

then

find $back -name *_$date_before -exec rm -rf {} \

eles

...

fi

shell如何实现自动记录备份次数?? # 这基本上是我的真实备份shell的框架,实际使用中我的机器上有四个数据库,并有日初、

# 日终的处理,当然也只是把下面的函数多几回调用而已。

# 启运方式使用cron机制自动启动

# 我没有主刻意去实现楼主要求的记数工作,因为我实在不太明白他具体的要求、目的,

# 但我想看了下在的shell,增个小功能不会太难的。

# 我懒,所以没有给各位朋友Email,大家自己看吧!

# 备份主shell 文件名:bk.sh

HOMEDIR=/u1/autodbbk/bkdir# 自动备份主程序目录

INFORMIXNAME=informix# informix用户名

TODAY=`date '+%Y%m%d'`# 备份日期

echo $TODAY $HOMEDIR >today# 日期文件

BKDIR=/u3/dbbk# 备份目录

LOGNAME=$BKDIR/log/$TODAY.bk.log# 备份日志

fun_dbexport()

{

# DBNAME=$1# 数据库名

# MAGNAME=$2# 管理用户

echo "\nbk$1 start ........................................................\n"

date '+%Y%m%d-%H:%M:%S'

set -x

su - $INFORMIXNAME -c "onmode -F"# 释放未使用的内存

su - $INFORMIXNAME -c "ontape -s -L 0"

rm -r $BKDIR/$1.exp $BKDIR/dbexport.$1

su - $2 -c "dbexport $1 -ss -o $BKDIR" >$BKDIR/dbexport.$1

sleep 10

FLAG=`grep "dbexport completed" $BKDIR/dbexport.$1`

if [ -z "$FLAG" ]

then echo "$1 dbexport ERR!"

else echo "$1 dbexport OK!"

fi

set +x

date '+%Y%m%d-%H:%M:%S'

echo "\nbk$1 end .........................................................\n"

}

fun_compress()

{

# DBNAME=$1

echo "\ncompress $1 start ................................................\n"

date '+%Y%m%d-%H:%M:%S'

cd $BKDIR

echo "compress $1.exp/*"

compress $1.exp/*

echo "tar cvfm $BKDIR/data/$TODAY.$1.ax.tar $1.exp dbexport.$1"

tar cvfm $BKDIR/data/$TODAY.$1.ax.tar $1.exp dbexport.$1

date '+%Y%m%d-%H:%M:%S'

echo "\ncompress $1 end ..................................................\n"

}

fun_ftp()

{

# DBNAME=$1

echo "\nftp $1 start .....................................................\n"

date '+%Y%m%d-%H:%M:%S'

set -x

chmod 644 $BKDIR/data/$TODAY.$1.*

# 做以下 cp 及传输是因为要与另一服务器上备份数据对传数据,并互相异机备份,

# 以便达到在两台机器的硬盘上、磁带上都有备份。

cp $BKDIR/data/$TODAY.$1.* $BKDIR/tar

cd $BKDIR/tar

ftp -n 192.1.41.67<<!

user down abcdefg

bin

cd /u3/dbbk/tar

put $TODAY.$1.ax.tar

!

set +x

date '+%Y%m%d-%H:%M:%S'

echo "\nftp $1 end .......................................................\n"

}

fun_dbchk()

{

# DBNAME=$1 # 数据库名

echo "\noncheck start ....................................................\n"

date '+%Y%m%d-%H:%M:%S'

su - $INFORMIXNAME -c "$HOMEDIR/update.sh $1"

su - $INFORMIXNAME -c "oncheck -cDI $1"

date '+%Y%m%d-%H:%M:%S'

echo "\noncheck end ......................................................\n"

}

fun_deldbfile()

{

# 此函数专门为自动删除备份目录中超过指定天数的文件而设计

if [ $# -lt 2 ]

then echo "格式:fun_deldbfile 数据库名 保留天数"

else

# DBNAME=$1

# MAXDAY=$2

N=`ls $BKDIR/data/*.$1.ax.tar|sort|wc -l`# 文件总数

if [ $N -gt $2 ]

thenM=`expr $N - $2`

ls $BKDIR/data/*$1.ax.tar|sort|sed -n "1,$M"p | \

sed "s/^/rm /" >tmp_dir.sh

sh tmp_dir.shrm tmp_dir.sh

fi

fi

}

fun_wrttyp()

{

FILE=`echo $1 | sed "s/\//|/g"`

if [ $# -lt 1 ]

thenecho "格式:wrtty 文本文件名"

else

who |awk -F ' ' '{print $2}'|sed "s/^/cat $FILE >\/dev\//" | \

sed "s/|/\//g" >tmp_wrtty.sh

sleep 1

sh tmp_wrtty.shrm tmp_wrtty.sh

fi

}

fun_killterm()

{

echo "\nkillterm start ...................................................\n"

date '+%Y%m%d-%H:%M:%S'

set -x

# 根据informix用户的环境变量设置环境变量,一定要保证informix环境变量正确

INFORMIXNAME=informix# informix用户名

INFORMIXDIR=`su - $INFORMIXNAME -c env|grep INFORMIXDIR|cut -f2 -d'='`

INFORMIXSERVER=`su - $INFORMIXNAME -c env|grep INFORMIXSERVER|cut -f2 -d'='`

ONCONFIG=`su - $INFORMIXNAME -c env|grep ONCONFIG|cut -f2 -d'='`

PATH=$PATHINFORMIXDIR/bin

export INFORMIXDIR INFORMIXSERVER ONCONFIG PATH

who -uxwonstat -u

#杀telnet终端

cd $HOMEDIR

who -u|grep ttyp|awk -F ' ' '{printf "kill -9 %s\n",$7}'>tmp_killt.sh

sh tmp_killt.sh

cat tmp_killt.sh

rm tmp_killt.sh

sleep 30

date '+%Y%m%d-%H:%M:%S'

#杀informix线索,因此shell后台执行,须先设置informix环境变量

echo "INFORMIXDIR=$INFORMIXDIR"> tmp_killu.sh

echo "INFORMIXSERVER=$INFORMIXSERVER">>tmp_killu.sh

echo "ONCONFIG=$ONCONFIG">>tmp_killu.sh

echo "ATH=$PATH">>tmp_killu.sh

echo "export PATH INFORMIXDIR INFORMIXSERVER ONCONFIG">>tmp_killu.sh

onstat -u

onstat -u|sed -n "6,$"p|grep -v "maximum concurrent"|grep -v "^$" | \

grep -v " root "|grep -v " informix " | \

awk -F ' ' '{printf "onmode -z %s\n",$3}' >>tmp_killu.sh

sh tmp_killu.sh

cat tmp_killu.sh

rm tmp_killu.sh

sleep 10

who -uxwonstat -u

set +x

date '+%Y%m%d-%H:%M:%S'

echo "\nkillterm end .....................................................\n"

# 这段的shell的正确与否有待高手指点

}

fun_main_after()

{

# DBNAME=$1

# 后续处理:备份压压宿、数据传送、优化及检查、删除多余的备份

fun_compress $12>&1 | tee -a $LOGNAME

fun_ftp $12>&1 | tee -a $LOGNAME

fun_dbchk $12>&1 | tee -a $LOGNAME

fun_deldbfile $1 25 2>&1 | tee -a $LOGNAME

}

main()

{

echo "\n自动备份启动 ........................................\n"|tee $LOGNAME

date '+%Y%m%d-%H:%M:%S' | tee -a $LOGNAME

# 初始处理:发布通告、杀终端、删除tar目录中的旧备份

fun_wrttyp $HOMEDIR/tz/tz0# 把tz0文件的内容写到当前所有在线ttyp上

fun_killterm 2>&1 | tee -a $LOGNAME

rm $BKDIR/tar/*tar

# 备份备理:执行dbexport

fun_dbexportdata1ocbps 2>&1 | tee -a $LOGNAME

# 后续处理:备份压缩、数据传送、优化及检查、删除多余的备份

fun_main_after data1

# 写入数据到磁带

echo "tar c8vm $TODAY.* \n"

# 下面sleep两小时,是为了等待另一台机器上的数据备份完成后传过来,再一起tar

cd $BKDIR/tarsleep 7200tar c8vm $TODAY.*# tar到磁带上

date '+%Y%m%d-%H:%M:%S' | tee -a $LOGNAME

echo "\n自动备份结束 .....................................\n"|tee -a $LOGNAME

}

main# 执行备份主程序

# 数据库优化shell 文件名:update.sh

#此文件为优化数据库用,它被系统自动备调用,请不要删除。

#格式:update.sh 数据库名

echo "\nupdate $1 start ...................................................\n"

date '+%Y%m%d-%H:%M:%S'

set -x

dbaccess $1 <<!

update statistics

!

set +x

date '+%Y%m%d-%H:%M:%S'

echo "\nupdate $1 end .....................................................\n"


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11507684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存