-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
オペレーターは、-nt
2つのファイルの期間を比較するときに最後に変更された時間を使用します。
出力によると、stat
この例の2つのファイルにまったく同じ修正時間(2番目まで正確です)、Jan 26 14:42:16 2017
(出力の2番目のタイムスタンプstat
)
したがって、あるファイルは他のファイルよりも「最新の」ファイルではなく、テストの実行順序に関係なくテストはfalseを返します。