当前位置: 技术问答>linux bash shell命令:文本搜索工具Grep命令选项及实例
iis7站长之家
问一个shell编程的问题:如何删除当前日期前n天的文件
来源: 互联网 发布时间:2015-11-09
本文导语: 存在一个目录,查找其中是按照yyyymmdd格式命名的文件;取当前日期,比如是20060213,前半个月是20060128;删除小于20060128的文件。 请问,用shell脚本如何实现? | #include #include int main(int arg...
存在一个目录,查找其中是按照yyyymmdd格式命名的文件;取当前日期,比如是20060213,前半个月是20060128;删除小于20060128的文件。
请问,用shell脚本如何实现?
请问,用shell脚本如何实现?
|
#include
#include
int main(int argc,char **argv)
{
time_t time_tmp;
struct tm *tm_now;
if((2==argc && isdigit(argv[1][0]))||(3==argc && isdigit(argv[2][0]) && ('D'==argv[1][0] || 'M'==argv[1
][0])))
{
switch (argv[1][0])
{
case 'M':
time_tmp=time(NULL);
tm_now=localtime(&time_tmp);
tm_now->tm_mon=tm_now->tm_mon-atoi(argv[2]);
time_tmp=mktime(tm_now);
tm_now=localtime(&time_tmp);
printf("%04d %02dn",tm_now->tm_year+1900,tm_now->tm_mon+1);
break;
case 'D':
time_tmp=time(NULL);
tm_now=localtime(&time_tmp);
tm_now->tm_mday=tm_now->tm_mday-atoi(argv[2]);
time_tmp=mktime(tm_now);
tm_now=localtime(&time_tmp);
printf("%04d %02d %02dn",tm_now->tm_year+1900,tm_now->tm_mon+1,tm_now->tm_mday
);
break;
default:
time_tmp=time(NULL);
tm_now=localtime(&time_tmp);
tm_now->tm_mday=tm_now->tm_mday-atoi(argv[1]);
time_tmp=mktime(tm_now);
tm_now=localtime(&time_tmp);
printf("%02dn",tm_now->tm_mday);
break;
}
return 0;
}
else
{
return 1;
}
}
eg:
./backdays D 3
2006 02 11
#include
int main(int argc,char **argv)
{
time_t time_tmp;
struct tm *tm_now;
if((2==argc && isdigit(argv[1][0]))||(3==argc && isdigit(argv[2][0]) && ('D'==argv[1][0] || 'M'==argv[1
][0])))
{
switch (argv[1][0])
{
case 'M':
time_tmp=time(NULL);
tm_now=localtime(&time_tmp);
tm_now->tm_mon=tm_now->tm_mon-atoi(argv[2]);
time_tmp=mktime(tm_now);
tm_now=localtime(&time_tmp);
printf("%04d %02dn",tm_now->tm_year+1900,tm_now->tm_mon+1);
break;
case 'D':
time_tmp=time(NULL);
tm_now=localtime(&time_tmp);
tm_now->tm_mday=tm_now->tm_mday-atoi(argv[2]);
time_tmp=mktime(tm_now);
tm_now=localtime(&time_tmp);
printf("%04d %02d %02dn",tm_now->tm_year+1900,tm_now->tm_mon+1,tm_now->tm_mday
);
break;
default:
time_tmp=time(NULL);
tm_now=localtime(&time_tmp);
tm_now->tm_mday=tm_now->tm_mday-atoi(argv[1]);
time_tmp=mktime(tm_now);
tm_now=localtime(&time_tmp);
printf("%02dn",tm_now->tm_mday);
break;
}
return 0;
}
else
{
return 1;
}
}
eg:
./backdays D 3
2006 02 11
|
存在一个目录,查找其中是按照yyyymmdd格式命名的文件;取当前日期,比如是20060213,前半个月是20060128;删除小于20060128的文件。
请问,用shell脚本如何实现?
./backdays D 3 |while read year,month,day
do
rm "DirPaht/*${yea}${month}${day}"
done
请问,用shell脚本如何实现?
./backdays D 3 |while read year,month,day
do
rm "DirPaht/*${yea}${month}${day}"
done
|
date=`/npkg03/bin/backdays D 1`
dt=`echo $date |awk '{print $1$2$3}'`
rm "DirPaht/*${dt}*"
dt=`echo $date |awk '{print $1$2$3}'`
rm "DirPaht/*${dt}*"
|
这一直是个问题,所以才有GNU date的功能增强。如果一定要用shell,那就是编程了,自己判断闰年、大小月等等。如果只是不想用C,用awk就可以。
|
得到半个月前时刻的“秒数”有两种方式:
NOW=`date +%s`;
let T1=$NOW-15*24*3600;
或者:
T1=`date -d '15 days ago' +%s`
得到特定日期的秒数:
date -d 20060101 +%s
然后简单计算一下就可以了
NOW=`date +%s`;
let T1=$NOW-15*24*3600;
或者:
T1=`date -d '15 days ago' +%s`
得到特定日期的秒数:
date -d 20060101 +%s
然后简单计算一下就可以了
|
可以利于数据库来解决分析
getdate()
{
sqlplus userName/passWord@serverName quit
!
}
getdate() |grep aaa |while read dt ,aaa
do
echo "${dt}n"
done
getdate()
{
sqlplus userName/passWord@serverName quit
!
}
getdate() |grep aaa |while read dt ,aaa
do
echo "${dt}n"
done