`ls -lt`は正確なmtimeを尊重しますか、それとも約秒単位のmtimeだけを尊重しますか?

`ls -lt`は正確なmtimeを尊重しますか、それとも約秒単位のmtimeだけを尊重しますか?

ls -lファイルの修正タイムスタンプ(最大秒)のみを表示します。両方のファイルの秒単位のタイムスタンプが同じですが、正確に同時に変更されていない場合、ls -ltファイルは正確なmtimeの順序で並べ替えられるか、またはほぼmtimeの秒単位の順序でのみソートされます(したがって、ファイル間の順序はランダムになる可能性があります)。

ベストアンサー1

ls実装によって多くが異なります。そのうちの4つはGNU / Linuxシステムにあります。

$ touch a; touch c; touch b; stat -c %y a c b
2018-01-10 12:52:21.367640342 +0000
2018-01-10 12:52:21.371640148 +0000
2018-01-10 12:52:21.375639952 +0000
  • 牛に似た一種の栄養ls、GNUプロジェクトのもの(GNUコアツール集める)。これは、Debian(LinuxまたはkFreeBSDカーネル)、Cygwin、またはFedoraなどのGNUシステムで一般的です。

    $ gnu-ls -rt
    a  c  b
    
  • ls~から家宝ツールボックス、OpenSolarisツールのポート:

    $ heirloom-ls -rt
    a  b  c
    
  • ls~からAT&Tオープンソースコレクション、おそらく組み込まれているでしょうksh93。素晴らしい拡張機能がたくさんあるもう一つの機能:

    $ ast-ls -rt
    a  c  b
    $ PATH=/opt/ast/bin:$PATH ksh93 -c 'type ls; ls -rt'
    ls is a shell builtin version of /opt/ast/bin/ls
    a  c  b
    
  • busybox(ほとんどの(通常は組み込み)Linuxベースのシステム(または派生システム)にあります):

    $ busybox ls -rt
    c  b  a
    

したがって、GNUとastはls2番目の部分の小数部分を考慮します。他の人は、同じ秒以内に最後に変更されたファイルの語彙比較を実行します。 Busyboxだけがそこをls尊重します-r

私のテストでは、FreeBSDはls1秒未満の精度もサポートしています(VFSレベルで有効になっている場合はvfs.timestamp_precisionsysctlを参照)。

zshglob(逆の順にomglob修飾子を使用して修正時間でソートされますOm)にも時間がかかります。

$ echo *(Om)
a c b

[ file1 -nt file2 ]、サポートされている場合、通常1秒未満の粒度もサポートされます。

おすすめ記事