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

最初にコメントされた ls は、必要なもの、秒単位の時間を生成しますが、 while ステートメントは機能せず、整数ベースのファイルを見つけることができません。2 番目の ls コマンドを使用すると、sed は hh:mm ベースの日付を変更せず、違いは機能しません。何か案は?

4

1 に答える 1

0

クエリのいくつかのポイント:
1. ファイル作成のタイムスタンプは Linux に保存されません。どのファイルについても、アクセス時刻変更時刻、および変更時刻のみが保存されます。[それらの違いについては、https://stackoverflow.com/a/79824/2331887
を参照してください 。1 つは最新の変更時刻で、コンテンツが変更されるたびに事実に基づく計算に使用するのが最適です。[前回の変更時刻と最新の変更時刻の違いを探してい

ます] コードのいくつかのポイント:
1. の 8 番目のパラメーター長いリストファイルの説明は、a)今年変更されたファイルの場合はhh:mm
を出力 し、 b)前の年に変更されたファイルの場合はhh:mmではなくyyyyを出力します。 したがって、計算にはあいまいさが生じます。解決策: hh*60+mmに基づく計算が必要な場合に使用できます。この計算はさらに、異なる日付を考慮していません。代わりに、時差を計算するために、 [エポック(1970 年 1 月 1 日午前 0 時) からの最終更新時刻 (秒単位) を提供する] を使用することをお勧めします。



ls --time-style='+%d-%m-%Y %H:%M' -l *.log | awk '{print $7}'
stat -c %Y *.log

2. コードのバグは非常に小さいです。ファイルの変更 日が同じ場合にのみ、これにより正しい出力が得られることに注意current=$(fname | sed s/:/*60+/g | bc);してください。current=$(echo $fname | sed s/:/*60+/g | bc);

于 2013-06-10T19:46:11.880 に答える