シンボリックリンク時間の比較

シンボリックリンク時間の比較

リンクがlnkfile通常の参照ファイルより古いかどうかを確認したいですreffile

Bashtestにはリンク逆参照機能が組み込まれているため、test lnkfile -ot reffile比較対象はlnkfileリンク自体ではありません。

test組み込み関数がシンボリックリンクに従わないようにする方法はありますか?それ以外の場合、シンボリックリンク時間をどのように比較できますか?

ベストアンサー1

使用できる方法はありませんが、test使用できますfind

test "$(find reffile -prune -newer lnkfile)" && command

ここでは以前に出力が返されますfind。と同じオプションはありません。これは、文字列の長さがゼロでない場合に当てはまります。したがって、出力がある場合は実行してください。lnkfilereffiletesttest -nfindcommand


コメントでは、このソリューションを他のソリューションと比較するように求められました。stat。まず私はこのstat方法がとても良いと思いました。

比較のためにベンチマークテストをしてみました。私はテストを何度も繰り返して同様の結果を得ました。

$ time (for i in {1..1000}; do test "$(stat --format=%Z a)" -lt "$(stat --format=%Z b)" && echo foo > /dev/null ; done)

================
CPU 101%
CPU 104%
user    1.264
system  0.942
total   2.108

$ time (for i in {1..1000}; do test "$(find b -newer a)" && echo foo > /dev/null ; done)

================
CPU 104%
user    0.693
system  0.526
total   1.164

私にとってはほぼ2倍速いようですがfind、おそらく2つではなく1つのプロセスだからでしょうかstats?どのように比較するのか分かりません。他の関連側面が思い出されたらコメントを残してください。

以下のStéphane Chazelasのコメントによると、いくつかの異なる違いがあります。

他の違いは次のとおりです。find一つは標準です。statGNU実装が必要です。statこのstat方法は、同じ秒以内に変更されたファイルでは機能しません(ただし、findタイムスタンプの1秒未満の単位をサポートするシステムでは機能する必要があります)。任意のファイル名はサポートされていませんfindstat

ファイルのいずれかをstat()編集できない場合は、他の違いを見つけることができます。

おすすめ記事