免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 6655 | 回复: 4

求解决 删除30天之间的日志,每个日志里都要日期 [复制链接]

论坛徽章:
0
发表于 2018-06-15 07:16 |显示全部楼层
假设一组日志:server.log-20180101.log,server.log-20180102.log,server.log-20180103.log,.....server.log-20180615.log,删除30天之前的日志,这个怎么写了,小弟先行谢过,初学者。

论坛徽章:
0
发表于 2018-06-15 07:17 |显示全部楼层
网上我也找了好多案例 都是以日志生成时间来删除的,有没有以日志名字里日期来删除的?

论坛徽章:
0
发表于 2018-06-15 10:15 |显示全部楼层
读文件夹你可以在网上查查

可以使用DateTime

删除文件可以用unlink

  1. use DateTime;

  2. my $file = "server.log-20180516.log";
  3. if ( $file =~ /server\.log-(\d{4})(\d{2})(\d{2})\.log/ ) {
  4.     if ( old_than_30($1, $2, $3) ) {
  5.         # delete file
  6.         unlink $file or warn "Could not unlink $file: $!";
  7.     }
  8. }

  9. sub old_than_30 {
  10.     my ($year, $month, $day) = @_;
  11.     my $dt = DateTime->new(
  12.         year       => $year,
  13.         month      => $month,
  14.         day        => $day,
  15.     );
  16.     my $now = DateTime->now;
  17.     my $delta_days = $now->delta_days($dt);
  18.     return 1 if $delta_days->delta_days() > 30;
  19.     return 0;
  20. }
复制代码

论坛徽章:
0
发表于 2018-06-19 22:49 |显示全部楼层
回复 3# asthman
大哥 谢谢啊 我觉的你写的这个太长了

论坛徽章:
0
发表于 2018-07-28 15:57 |显示全部楼层
#linux版powershell代码。win,linux通用


#按时间删除
  1. $30天前 = (get-date).AddDays(-30)
  2. Get-ChildItem /你的目录 -File -Recurse |Where-Object { $_.CreationTime -lt $30天前} #只删除文件,含子目录文件
复制代码


#===================================================
#为什么网上没有例子,因为需要把字符串转换成日期,然后和日期对象对比。
#我不太懂perl,它好像不是面向对象的语言。

function 导入日期($特殊日期_字符串)
{
    $特殊日期_格式 = 'yyyyMMdd'
    $script:返回的日期 = New-Object DateTime
    [System.DateTime]::TryParseExact(
        $特殊日期_字符串,
        $特殊日期_格式,
        [System.Globalization.CultureInfo]::InvariantCulture,
        [System.Globalization.DateTimeStyles]::None,
        [ref]$script:返回的日期)
}
$a = '20180102'
if (导入日期 $a )
{
    $b = $script:返回的日期
}

#===================================================
#按文件名删除
  1. function 导入日期($特殊日期_字符串)
  2. {
  3.     $特殊日期_格式 = 'yyyyMMdd'
  4.     $script:返回的日期 = New-Object DateTime
  5.     [System.DateTime]::TryParseExact(
  6.         $特殊日期_字符串,
  7.         $特殊日期_格式,
  8.         [System.Globalization.CultureInfo]::InvariantCulture,
  9.         [System.Globalization.DateTimeStyles]::None,
  10.         [ref]$script:返回的日期)
  11. }

  12. $30天前 = (get-date).AddDays(-30)
  13. Get-ChildItem /你的目录 -File -Recurse |ForEach-Object {
  14.         $日期字串 = $_.basname.split('-')[1]
  15.         if (导入日期 $日期字串)
  16.         {
  17.             $日期对象 = $script:返回的日期
  18.         }

  19.         if ($日期对象 -lt $30天前)
  20.         {
  21.             Remove-Item -LiteralPath $_.fullname
  22.         }
  23. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

【CUer福利】柯尼卡美能达2018数字化整合解决方案巡展
智领共创链动价值-2018数字化整合解决方案巡展

2018年11月,柯尼卡美能达携手主流IT网络媒体IT168及旗下ITPUB、ChinaUnix等论坛,特此邀请企业IT管理、运维人员/办公设备采购负责人员共同参与,分享柯尼卡美能达“智领共创链动价值”-2018数字化整合解决方案巡展!现场体验MOBOTIX智能视频监控解决方案!

活动入口>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP