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


16

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

基本的に比較が機能しない場合、私は推測します。または、私がやっていること以外の良い方法があれば、教えてください。何を変更する必要がありますか?


1
コードには、角括弧の周りにスペースが必要です。
ジョナサンレフラー

テストメカニズムは、タイムスタンプを比較するための組み込みメカニズムと比較して非常に複雑です。
ジョナサンレフラー

回答:


26

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

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

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


5

これは、一部のスペースが欠落しているためです。[はコマンドであるため、周囲にスペースが必要です。また、コマンド]ラインの終了位置を示す特別なパラメーターです。したがって、テストラインは次のようになります。

if [ $file1time -gt $file2time ];

3
[はテストコマンドbashです。マニュアルページの「条件式」セクションを参照してください。/usr/bin/testandにはスタンドアロンの実行可能ファイルもあり/usr/bin/[ますが、bashを使用していて、フルパスを使用していない場合は、シェルの組み込みコマンドを使用しています。
ダグ・ハリス

@Doug Harris +1により、トピックに関するより完全な説明が得られます。
goedson

1

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

if [ "$file1time" -gt "$file2time" ]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.