shell-删除目录下指定日期前的所有文件
2010-04-07 10:59
821 查看
有一批runlog.YYYYMMDD* 的日志文件(文件名中带有年月日信息),需要一次清理指定的日期前/或设置N天前的所有文件。
编写了一个shell脚本,用于完成此项任务。
脚本内容:
#!/bin/sh -
#############################################
# Created by Ma Fanghua #
# 2010-04-07 #
#############################################
help()
{
echo "the usage of deleteshell"
echo "deleteshell.sh YYYYMMDD"
echo "deleteshell.sh -b days_before"
exit;
}
calc_date()
{
str=`date '+%Y%m%d'`
days=$clean_before_days
yy=`echo $str|cut -c 1-4`
mm=`echo $str|cut -c 5-6` && mm=`expr $mm - 0`
dd=`echo $str|cut -c 7-8` && dd=`expr $dd - 0`
sav_dd=$days
days=`expr $days - $dd`
while [ $days -ge 0 ]
do
mm=`expr $mm - 1`
[ $mm -eq 0 ] && mm=12 && yy=`expr $yy - 1`
aaa=`cal $mm $yy`
bbb=`echo $aaa|awk '{print $NF}'`
days=`expr $days - $bbb`
done
dd=`expr 0 - $days`
#expr $dd : "^.$" > /dev/null && dd=0$dd
#expr $mm : "^.$" > /dev/null && mm=0$mm
[ $dd -le 10 ] && dd=0$dd
[ $mm -le 10 ] && mm=0$mm
threshold_date=$yy$mm$dd
}
if [ $# -lt 1 ] ; then
help;
fi
D_DATE=$1
while getopts hb: OPTION
do
case $OPTION in
h) help;;
b) echo $OPTARG
clean_before_days=$OPTARG
calc_date
D_DATE=$threshold_date;;
/?) echo "invalid args"
exit;;
esac
done
D_DATE_LEN=`echo $D_DATE | awk '{printf("%d",length($1))}'`
if (($D_DATE_LEN != 8))
then
echo "please input the date with format YYYYMMDD!"
exit
fi
TMP_DATE=`ls runlog.*`
for file_name in $TMP_DATE
do
DATE_NUM=`echo $file_name | awk -F. '{printf("%s"),$2}' | cut -c 1-8`
if (($DATE_NUM < $D_DATE))
then rm -r $file_name
fi
done
使用方法
xxx.sh -h
xxx.sh -b n
xxx.sh YYYYMMDD ( 如 xxx.sh 20100407)
编写了一个shell脚本,用于完成此项任务。
脚本内容:
#!/bin/sh -
#############################################
# Created by Ma Fanghua #
# 2010-04-07 #
#############################################
help()
{
echo "the usage of deleteshell"
echo "deleteshell.sh YYYYMMDD"
echo "deleteshell.sh -b days_before"
exit;
}
calc_date()
{
str=`date '+%Y%m%d'`
days=$clean_before_days
yy=`echo $str|cut -c 1-4`
mm=`echo $str|cut -c 5-6` && mm=`expr $mm - 0`
dd=`echo $str|cut -c 7-8` && dd=`expr $dd - 0`
sav_dd=$days
days=`expr $days - $dd`
while [ $days -ge 0 ]
do
mm=`expr $mm - 1`
[ $mm -eq 0 ] && mm=12 && yy=`expr $yy - 1`
aaa=`cal $mm $yy`
bbb=`echo $aaa|awk '{print $NF}'`
days=`expr $days - $bbb`
done
dd=`expr 0 - $days`
#expr $dd : "^.$" > /dev/null && dd=0$dd
#expr $mm : "^.$" > /dev/null && mm=0$mm
[ $dd -le 10 ] && dd=0$dd
[ $mm -le 10 ] && mm=0$mm
threshold_date=$yy$mm$dd
}
if [ $# -lt 1 ] ; then
help;
fi
D_DATE=$1
while getopts hb: OPTION
do
case $OPTION in
h) help;;
b) echo $OPTARG
clean_before_days=$OPTARG
calc_date
D_DATE=$threshold_date;;
/?) echo "invalid args"
exit;;
esac
done
D_DATE_LEN=`echo $D_DATE | awk '{printf("%d",length($1))}'`
if (($D_DATE_LEN != 8))
then
echo "please input the date with format YYYYMMDD!"
exit
fi
TMP_DATE=`ls runlog.*`
for file_name in $TMP_DATE
do
DATE_NUM=`echo $file_name | awk -F. '{printf("%s"),$2}' | cut -c 1-8`
if (($DATE_NUM < $D_DATE))
then rm -r $file_name
fi
done
使用方法
xxx.sh -h
xxx.sh -b n
xxx.sh YYYYMMDD ( 如 xxx.sh 20100407)
相关文章推荐
- Linux监控系统磁盘使用比例,当使用率达到指定比例,删除指定目录下的所有文件的shell脚本
- delphi 删除指定目录 下 指定日期之前所有文件
- Linux或者MAC下查找指定目录下的所有指定名字的文件并删除的命令
- 一个使用多线程删除指定目录及子目录下所有指定文件的Java程序(源码)
- linux 删除目录下所有指定文件
- shell脚本删除目录下的指定文件
- Shell脚本递归打印指定目录中所有目录文件
- linux 下pyhton 删除指定目录下所有的重复内容的文件
- windows机器中删除指定日期文件和目录的bat
- asp.net 删除文件夹,指定文件夹,删除文件夹和所有文件,删除权限设置,递归删除文件夹目录及文件
- PHP删除目录及目录下所有文件或删除指定文件
- 批处理-删除目录和所有子目录里的指定后缀文件
- asp.net 删除文件夹,指定文件夹,删除文件夹和所有文件,删除权限设置,递归删除文件夹目录及文件
- NO.49 删除某目录下所有指定名称的文件(比如批量删除vssver.scc)
- Python_删除/创建指定目录及其下所有子目录的文件,该文件记录当前文件夹的内容
- Linux下如何遍历指定目录下的所有文件并删除指定天数之前创建的文件
- 删除一个目录下的所有文件,但保留一个指定文件
- Linux-删除一个目录下的所有文件,但保留一个指定文件
- 编写一个SHELL脚本,可以获得指定目录下的所有文件及文件夹的大小。输出的样式与 ls -lh 命令相同。
- Linux下如何遍历指定目录下的所有文件并删除指定天数之前创建的文件