リンクがlnkfile
通常の参照ファイルより古いかどうかを確認したいですreffile
。
Bashtest
にはリンク逆参照機能が組み込まれているため、test lnkfile -ot reffile
比較対象はlnkfile
リンク自体ではありません。
test
組み込み関数がシンボリックリンクに従わないようにする方法はありますか?それ以外の場合、シンボリックリンク時間をどのように比較できますか?
ベストアンサー1
使用できる方法はありませんが、test
使用できますfind
。
test "$(find reffile -prune -newer lnkfile)" && command
ここでは以前に出力が返されますfind
。と同じオプションはありません。これは、文字列の長さがゼロでない場合に当てはまります。したがって、出力がある場合は実行してください。lnkfile
reffile
test
test -n
find
command
コメントでは、このソリューションを他のソリューションと比較するように求められました。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
一つは標準です。stat
GNU実装が必要です。stat
このstat
方法は、同じ秒以内に変更されたファイルでは機能しません(ただし、find
タイムスタンプの1秒未満の単位をサポートするシステムでは機能する必要があります)。任意のファイル名はサポートされていませんfind
。stat
ファイルのいずれかを
stat()
編集できない場合は、他の違いを見つけることができます。