新しいテストの正確さ

新しいテストの正確さ

-newerテストが望むほど正確ではないようです。以下を使用してls -lt正しいソート順序を取得します。

-rw-r--r--@ 1 p  staff      48 Jan 26 14:42 foo.gdb
-rw-r--r--@ 1 p  staff  328971 Jan 26 14:42 foo.pdf
-rw-r--r--@ 1 p  staff    3133 Dec 14 05:52 foo.tex

ただし、-newerテスト結果を使用すると、次のようになります。

../isNewer.sh foo.gdb foo.pdf
File 1 is older than file 2

../isNewer.sh foo.pdf foo.gdb
File 1 is older than file 2

../isNewer.shどこ

#!/bin/bash

if [ $1 -nt $2 ]; then
  echo "File 1 is newer than file 2"
else
  echo "File 1 is older than file 2"
fi

出力stat

stat foo.pdf foo.gdbコメントで要求されたように、出力(読みやすくするために手動でスペースを追加します)は次のとおりです。

16777217 255313605 -rw-r--r-- 1 p staff 0 328971 "Jan 26 21:28:06 2017" "Jan 26 14:42:16 2017" "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" 4096 648 0 foo.pdf
16777217 255313604 -rw-r--r-- 1 p staff 0 48     "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" "Jan 26 21:27:33 2017" "Jan 26 14:42:16 2017" 4096 8   0 foo.gdb

質問:

  • テストはどれくらい正確ですか-newer>?
  • あるファイルが別のファイルより最新であるかどうかをより詳細にテストする別の方法はありますか(おそらく分ではなく秒単位で比較)。

プラットフォーム:

  • Bash 3.2.53(1) リリースを搭載した MacOS

ベストアンサー1

オペレーターは、-nt2つのファイルの期間を比較するときに最後に変更された時間を使用します。

出力によると、statこの例の2つのファイルにまったく同じ修正時間(2番目まで正確です)、Jan 26 14:42:16 2017(出力の2番目のタイムスタンプstat

したがって、あるファイルは他のファイルよりも「最新の」ファイルではなく、テストの実行順序に関係なくテストはfalseを返します。

おすすめ記事