2013-06-10 3 views
2

나는 bash 스크립트를 사용하여 파일 생성/수정 시간의 차이를 찾기위한 스크립트를 작성 중이다. QNX 실행이 작업을 쉽게 수행 할 수있는 공통적 인 테마 날짜 기능을 사용할 수 없습니다. 정수 기반의 파일을 찾을 수없는,하지만 첫 번째 LS 댓글을 달았습니다파일 시간의 차이

last=0 
    current=0 
#ls -l /path/*.log | awk '{print $8}' | sed s/:/*60+/g | bc | 
ls -l /path/*.log | awk '{print $8}' | 
while read fname 
do 
    current=$(fname | sed s/:/*60+/g | bc) 
    echo $current 
    echo $fname 
    if [ $last -gt 0 ]; then 
     echo "the difference is $($current - $last) minutes" 
     last=$current  
    else 
     last=$current 
     echo $fname 
    fi  
done 

내가, 시간을 초 단위로 필요한 생산, while 문이 작업을 doesnot을 : 나는 현재이 ls 명령에서 날짜를 수정 접근하고 . 두 번째 ls 명령을 사용하면 sed는 hh : mm 기반 날짜를 수정하지 않으며 차이점은 작동하지 않습니다. 어떤 아이디어? 귀하의 질의에

답변

0

몇 가지 포인트 :
1. 파일 생성 타임 스탬프가 리눅스에 저장되지 않습니다. 시간에만 액세스, 수정 된 시간변경된 시간은 모든 파일에 저장됩니다. [차이점은 https://stackoverflow.com/a/79824/2331887을 참조하십시오.]
2. 이제 어떤 타임 스탬프 차이를 찾아야할지 다시 생각해보십시오. 최신 수정 된 시간은 콘텐츠가으로 수정 될 때마다 사실 을 기반으로 계산하는 것이 가장 좋으며, 다른 시간은 차이가 날 것입니다.

몇 가지 포인트 코드에 [당신은 이전의 수정 시간과 최근 수정 시간의 차이를 찾고 있습니다] : 긴 목록 파일 설명의
1. 8 매개 변수 것 출력
A) HH : MM 현재 연도에 수정 된 파일에 대한
B) YYYY 대신 의시 : 작년에 수정 된 파일에 대한 mm.
따라서 계산시 모호성이 발생합니다.

솔루션 : 당신은 당신이 HH * 60 + mm에 따라 계산하려는 경우에 ls --time-style='+%d-%m-%Y %H:%M' -l *.log | awk '{print $7}'를 사용할 수 있습니다. 이 계산은 다른 날짜를 처리하지 않습니다.
대신 시간 차이를 계산하기 위해, 나는

2. 코드의 버그 [신기원 (자정 1/1/1970) 이후 (초
에서 ) 마지막으로 수정 한 시간을 제공] stat -c %Y *.log를 사용하는 것이 좋습니다 매우 작습니다. current=$(fname | sed s/:/*60+/g | bc);current=$(echo $fname | sed s/:/*60+/g | bc);
으로 변경하십시오. 이는 파일의 수정 날짜가 동일한 경우에만 올바른 출력을 제공합니다.

관련 문제