编写一个目录清理脚本。要求,用 -d 选项 标示 需要清理的目录, 用 -c 选项 标示 目录下保留的文件数量。 超出该数量的话,把较老的文件打包 压缩,备份到其他目录下。
点击(此处)折叠或打开
- #!/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
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12238525/viewspace-1243407/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12238525/viewspace-1243407/