web-dev-qa-db-ja.com

bashでファイルのタイムスタンプを比較する方法は?

2つのファイルのタイムスタンプを比較するにはどうすればよいですか?

私はこれを試しましたが、うまくいきません:

file1time=`stat -c %Y fil1.txt`
file2time=`stat -c %Y file2.txt`
if[$file1time -gt $file2time];
then
 doSomething
fi

両方のタイムスタンプを順番に印刷したので、

1273143480
1254144394
./script.sh: line 13: [1273143480: command not found

つまり、基本的にはifの比較は機能していません。または、私がやっていること以外に良い方法がある場合は、お知らせください。何を変更する必要がありますか?

17
newcoderintown

タイムスタンプを比較するための演算子は次のとおりです。

[ $file1 -nt $file2 ]
[ $file1 -ot $file2 ]

ニーモニックは簡単です。「より新しい」と「より古い」です。

27

これは、いくつかの欠落したスペースが原因です。 [はコマンドであるため、周囲にスペースが必要です。]は、コマンドラインが終了する場所を伝えるための特別なパラメーターです。したがって、テスト行は次のようになります。

if [ $file1time -gt $file2time ];
5
goedson

ifは魔法ではありません。渡されたコマンドの実行を試み、終了ステータスがゼロかどうかを確認します。また、存在しない引数をうまく処理しないため、その中で使用されている変数を引用する必要があります。

if [ "$file1time" -gt "$file2time" ]
if ( [ $file1time -gt $file2time ] );
then
 doSomething
fi                                                                    
0
user328064