点击(此处)折叠或打开
-
#!/bin/bash
-
-
if [ $1 = \'-c\' ] && [[ $2 =~ \"^[1-9][0-9]*$\" ]] ; then # 判定是参数1 是否 是选项 -c 并且 参数2 是否是纯数字 (用 正则表达式判断)
-
f_cnt=$2 # 如果满足上面的条件的话, 把 参数2 当做 保留的文件数量
-
elif [ $1 = \'-d\' ] && [ -d $2 ]; then # 如果参数1 是 选项 -d 并且 参数2 是个目录的话
-
f_dir=$2 # 如果满足上面的条件的话, 把 参数2 当做 要清理的目录
-
else
-
echo \"invaild option\"
-
fi
-
-
-
if [ $3 = \'-c\' ] && [[ $4 =~ \"^[1-9][0-9]*$\" ]] ; then # 这一部分 跟 上一段代码类似。 意思是 -c -d 选项 的前后次序 无所谓。
-
f_cnt=$4
-
elif [ $3 = \'-d\' ] && [ -d $4 ]; then
-
f_dir=$4
-
else
-
echo \"invaild option\"
-
fi
-
-
if [ $f_cnt ]; then
-
echo \"file count : \" $f_cnt
-
fi
-
-
-
if [ $f_dir ]; then
-
echo \"file direction : \" $f_dir
-
fi
-
-
fi
-
-
-
if [ $f_cnt ] && [ $f_dir ]; then
-
-
let t_cnt=\"`ls -l $f_dir/ | wc -l` - 1\"
-
echo $f_cnt
-
-
if [ $t_cnt -gt $f_cnt ]; then
-
-
echo \'old archive log\'
-
let d_cnt=\"$t_cnt - $f_cnt\" # 计算出 需要清理的文件的个数
-
echo \"$d_cnt files need clear\"
-
-
ls -ltr $f_dir/ | awk \'{ print $9 }\' | head -`expr $d_cnt + 1` | tail -$d_cnt > f.list # 按修改时间排序,把需要清理的老文件 存到 f.list 列表中
-
-
date_dir=`date +%y_%m_%d`
-
mkdir -p /u02/backup/arch/$date_dir
-
for i in `cat f.list`
-
do
-
echo $f_dir/$i
-
mv $f_dir/$i /u02/backup/arch/$date_dir/ # 把待清理的文件 移动其他目录下 (该目录 带有当前日期)
-
done
-
-
cd /u02/backup/arch/
-
tar -cvf $date_dir.tar $date_dir # 对清理的文件 打包压缩
-
gzip $date_dir.tar
-
rm -rf /u02/backup/arch/$date_dir
-
echo \"$d_cnt file cheaned\"
-
-
else
-
echo \'less euqal $f_cnt files\'
-
fi
-
- fi