查找具有错误日期的文件名

2024-06-26 14:52:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个目录,其中的文件名都是以增加日期为后缀的。在

例如:

REUTERS.FH_lbm_dump.20120905 

代表9月5日。在

这些文件应该在第二天的前几分钟创建,例如,上面的文件应该是在9月6日00:01创建的。在

但是,由于文件名的生成方式有一些缺陷,应用程序错误地保存了它们。所以9月5日00:16创建的文件后缀为20120905,即文件名晚了1天。在

来自ls -h的输出显示错误的命名:

^{pr2}$

因此,检测这一点的逻辑是查看文件名,提取日期,如果它等于文件时间戳,那么它将是正的。在

我们如何在Bash/Perl/Python中做到这一点?在


Tags: 文件目录应用程序文件名错误方式代表逻辑
2条回答

您应该使用^{}来操作日期,而使用^{}可以方便地访问文件统计数据

此程序查找当前目录中后缀为8位数的所有文件

它对每个文件使用mtimestat来构建一个Time::Piece对象,减去一天,并将日期格式化为YYYYMMDD

结果将与实际的文件后缀进行比较,如果两者不一致,则报告该文件不正确

use strict;
use warnings;

use File::stat;
use Time::Piece ();
use Time::Seconds 'ONE_DAY';

for my $file (glob '*') {

  next unless -f $file;
  my ($suffix) = $file =~ /([^.]+)\z/;
  next unless $suffix =~ /\A\d{8}\z/;

  my $dt = Time::Piece->new(stat($file)->mtime);
  $dt -= ONE_DAY;
  $dt = $dt->strftime('%Y%m%d');

  printf "File %s NOT CORRECT\n", $file unless $suffix eq $dt;
}

我不会解决你的全部问题,但我会给你一个开始的地方。剩下的就看你了。在

#!/bin/bash

# loop through all filenames in current dir
for filename in *; do

    # How to extract the date from the file name
    date_from_file=${filename:(-8)}

    # How to get the file's modification date in the same format
    date_modified=$(stat -c %y "$filename" | cut -d ' ' -f1 | sed 's/-//g')

    # test for inequality
    if [ $date_from_file -ne $date_modified ]; then

        ... # do your thing

    fi

done

相关问题 更多 >