之前参加ctf比赛时候临时写的,有很多不足,不过可以用,就贴出来分享给大家,希望对大家有帮助。
脚本一:记录当前目录情况
#!/bin/bash
function getdir(){
for element in `ls $1`
do
dirfile=$1"/"$element
if [ -d $dirfile ]
then
getdir $dirfile
else
#将目录结构和大小存为一个临时文件
echo `du -ab $dirfile` >> ./t.txt
#echo $dirfile >> ./dir.txt
fi
done
}
# 监控的目录
DIR="/root/yxy"
getdir $DIR
function getdir1(){
for element in `ls $1`
do
dir_or_file=$1"/"$element
if [ -d $dirfile ]
then
getdir1 $dirfile
else
#将目录结构和大小存为一个临时文件
echo `du -ab $dirfile` > ./t1.txt
#echo $dirfile >> ./dir.txt
fi
done
}
DIR="/root/yxy"
getdir1 $DIR
echo `diff ./t.txt ./t1.txt` >> diff.txt
rm ./t1.txt
脚本二:对比脚本一的记录,恢复变化目录或文件
#!bin/bash
function backup(){
#发生变化的文件,在备份目录下的完整路径
backup_dir="/backup/"`tail -n1 ./diff.txt | awk '{print $4}' | cut -d / -f 3-`
#想要恢复的目录,将文件恢复到该目录下
backupfile=`cat ./diff.txt | awk '{print $4}' | cut -d / -f -3`
for element in `ls $1`
do
dirfile=$1"/"$element
if [ -d $dirfile ]
then
backup $dirfile
elif [[ -f $backup_dir && $backup_dir != $dirfile ]]
then
cp $backup_dir $backupfile
else
#要删除的文件
dir=$DIR`tail -n1 diff.txt | awk -F"/" '{print "/"$NF}'`
#这里不能用-r,diff.txt没有不同时,加-r会删除整个目录
rm -f $dir
fi
done
}
#监控目录
DIR="/root/yxy"
backup $DIR