2010-02-18 3 views
1

모든 파일의 수정 시간을 한 디렉토리에 확인하고 싶습니다. 파일에 현재 시스템 시간과 다른 시간이 있으면 RED가 인쇄됩니다. 그렇지 않으면 GREEN이 인쇄됩니다.awk의 시간 비교

ls -lrt| grep main | awk '{if ($8 != `date +%R`) print "-->RED"}END{print"-->GREEN"}' 

위의 진술을 수정하는 방법을 제안 해주십시오. 백만 감사합니다.

+0

[[]][]와 쌍과 $(...)을 대체 할 수는 재부 시간에서 그것은 '다른'인가? 확실합니까? 시스템 시간보다 적거나 같지 않은 것은 무엇입니까? 또한, 'main'은 무엇입니까? 기본 이름 만 포함 된 파일을 확인하고 있습니까? – vpram86

+0

예, 현재 시스템 시간으로 파일을 검색하고 싶습니다. 내 로그 파일이 매 초마다 업데이트됩니다. –

답변

1

이 만 쉘과 날짜 명령을

#!/bin/bash 
current=$(date +%R) 
for file in *main* 
do 
    d=$(date +%R -r "$file") 
    if [ "$d" = "$current" ];then 
     echo "GREEN: $file, current:$current, d: $d" 
    else 
     echo "RED: $file, current: $current, d: $d" 
    fi 
done 

그냥 단지 날짜를 비교할 수 있기 때문에 당신이 당신의 자신의 필요에 적응해야합니다 노트, 또는 시간이 그것을 할 수있는 하나의 방법입니다, 그것이 무엇이든, 다양한 날짜 형식의 날짜 맨 페이지를 확인하십시오.

당신이 AWK을 함께하고 싶어, 여기에 순수한 AWK (+ GNU 일) 솔루션

awk 'BEGIN{ 
    cmd="date +%R" 
    cmd|getline current 
    close(cmd) 
    for(i=1;i<=ARGC;i++){ 
     file=ARGV[i] 
     if(file!=""){ 
      cmd="date +%R -r \047"file"\047" 
      cmd |getline filetime 
      close(cmd) 
      if(filetime==current){ 
       print "GREEN: "file 
      }else{ 
       print "RED: "file 
      } 
     } 
    } 
} 
' * 
+0

백만 감사드립니다. 나는 다음과 같이 수정할 수있다 : ls -lrt | awk 'BEGIN {cmd = "날짜 + % R"; cmd | getline current; 언급 된 포스터 중 하나로서 –

+0

을 인쇄하십시오.'ls -ltr'을 사용하여 날짜를 구문 분석하지 마십시오. 내 시스템에서 시간과 분은 $ 7입니다. 또한 'ls'는 때로는 별칭을 사용하므로 어디서나 작동하지 않을 수 있습니다. stat/date를 사용하여 타임 스탬프를 얻으십시오. – ghostdog74

2

Don't parse the output of ls입니다. stat으로 원하는 것을 할 수 있습니다.

stat -c%Y file 출력됩니다 1월 1일 이후의 초에있는 파일의 수정 시간, 1970 date +%s 출력됩니다 1월 1일 이후의 초 현재 시간, 그래서 1970

, 당신이 원하는 것은하여 수행 할 수 있습니다 :

if [[ $(stat -c%Y main) -ne $(date +%s) ]] 
then 
    echo "RED" 
else 
    echo "GREEN" 
fi 

언제든지이 다른 경우에는 파일 목록 위, 출력 RED을 원하는 경우 :

to_print=GREEN 
for f in *main* 
do 
    if [[ $(stat -c%Y "$f") -ne $(date +%s) ]] 
    then 
     to_print=RED 
     break 
    fi 
done 
echo $to_print 

당신이 떠들썩한 파티를 사용하지 않는 경우, 당신은

`...` 
+0

고마워,하지만 주된 키워드는 –

+0

을 의미한다. "주 키워드"란 무엇을 의미합니까? "main"과 일치하는 파일 이름을 찾고 있습니까? –

+0

오 예, 그러면 다음과 같이 수정할 수 있습니다 : ls -lrt | awk 'BEGIN {cmd = "날짜 + % R"; cmd | getline current; close (cmd)} {if $ 8! = 현재 "RED"} END {print "GREEN"} ' 감사합니다. –