2012-09-10 5 views
2

파일 이름이 확장명이 붙은 확장명과 공통된 파일이있는 디렉토리가 있습니다.파일 이름이 잘못 주어진 파일 찾기

예는 다음과 같습니다

REUTERS.FH_lbm_dump.20120905 

9 월 5 일을 나타내는.

이러한 파일은 다음날 몇 분 이내에 생성되어야합니다. 예 : 위의 파일은 9 월 6 일 00:01에 생성 된 것입니다. 파일 이름이 생성되는 방법, 응용 프로그램이 잘못을 절약 된 일부 버그로 인해 그러나

. 따라서 9 월 5 일 00:16에 생성 된 파일에는 20120905라는 접미사가 붙습니다. 즉, 파일 이름이 1 일 늦었습니다. 잘못된 이름을 보여주는 ls -h에서

출력 :

2012-09-05 00:16 FH_lbm_dump.20120905 

그래서 논리는,이 파일 이름에 보일 것이다 감지 날짜를 추출, 파일 타임 스탬프는 동일한 경우는 긍정적 인 것입니다.

어떻게하면 Bash/Perl/Python에서이 작업을 수행 할 수 있습니까?

+3

오신 것을 환영합니다 스택 오버플로! [귀하의 질문을 연구하십시오] (http://stackoverflow.com/questions/how-to-ask). [이미 시도한 것] (http://whathaveyoutried.com/)이 있으면 질문에 추가하십시오. 아니라면 질문을 먼저 연구하고 시도한 다음 다시 방문하십시오. –

답변

5

전체 문제를 해결할 수는 없지만 시작해 보겠습니다. 나머지는 당신에게 달려 있습니다.

#!/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 
0

당신은 통계 데이터를 파일에 편리하게 액세스 조작 날짜 Time::PieceFile::stat를 사용해야합니다

이 프로그램은 그 접미사입니다 8 자리

그것은을 사용하여 현재 디렉토리에있는 모든 파일을 찾습니다

각 파일의 mtime 통계는 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; 
} 
관련 문제