ls -lrtが最後の修正年を返した場合は完全にランダムに見えるのはなぜですか?

StackOverflow https://stackoverflow.com//questions/21002549

  •  20-12-2019
  •  | 
  •  

質問

これはUNIXのls -lrtコマンドの結果です。

-rw-r--r--   1 blah      blah          846       Apr 18  2013 filetype1.log
-rw-r--r--   1 blah      blah          290338533 Jan  3 00:59 filetype2.log
.

他の人が月、日、そしてタイムスタンプを持っている間に一年を便利に返却するのはなぜですか?どのように私はいつも年を取得できますか?

編集: 最後の編集時間が現在の年以内ではなく、まだ年のいずれかの編集時間があった例です。

-rw-r--r--   1 blah      blah       689466 Dec 31 23:59 filetype2.log
-rw-r--r--   1 blah      blah       689591 Jan  1 00:59 filetype2.log
.

役に立ちましたか?

解決

GNU Coreutilsマニュアルから:

10.1.6フォーマットファイルのタイムスタンプ

デフォルトでは、ファイルタイムスタンプは日付を使用して省略形式でリストされています。 最近のタイムスタンプの場合は「2002年3月30日」、および日程のない日付 そして最近のタイムスタンプの「3月30 23:45」のような時間。このフォーマットCAN. 以下の詳細なロケールによって変わります。

タイムスタンプは6未満の場合、「最近」と見なされます。 ヶ月の頃、そして将来日付は述べられていません。今日のタイムスタンプの場合 最近の形式では記載されていないため、タイムスタンプは将来的にあります。 プログラムを破る可能性がある時計の斜行の問題があることを意味します ファイルのタイムスタンプに頼る「作る」と同じように。

他のヒント

コメントとチャット、あなたはC#プログラムのリモートシステム上のファイルの修正時刻を取得しようとし、リモートシステム(HP-UXを実行している)にソフトウェアをインストールできません。

(ファイル作成時刻も言及しましたが、UNIXはその情報を保存しない、変更時刻、アクセス時間、および最新のinode変化の時間)。

システムにはGNU Coreutilsがインストールされていないため、ls --time-style=...またはstatコマンドを使用することはできません。

Perlを持っているので、組み込みのstat関数を使用して、非常に単純なPerlスクリプトを使用してファイルの修正時間を取得できます。

Perlからタイムスタンプを表示する最も簡単な方法は、UNIXエポック、1970-01-01 00:00:00 GMT以降の秒数です。それはC#プログラムから解析する最も簡単な形式である可能性があります。

リモートシステムでこのスクリプトを作成する:

#!/usr/bin/perl

use strict;
use warnings;

foreach my $file (@ARGV) {
    my @stat = stat $file;
    if (defined $stat[9]) {
        print "$stat[9] $file\n";
    }
    else {
        die "$file: $!\n";
    }
}
.

と実行可能(chmod +x script-file-name)にします。その後、コマンドライン引数として1つ以上のファイル名で呼び出すことができます。ファイルごとに、その変更時間とその名前を印刷します。

C#プログラムからの出力の解析は演習として残されています。

GNU CoreUtils statコマンドを持っていた場合は、代わりにこれを行うことができます。

stat -c '%Z %n' filename
.

lsと似たことができる:

ls --time-style=+%s filename
.

しかしそれは追加情報を印刷し、解析が難しいです。 ls出力は、必ずしもマシンパーセラブルではなく、人間が読めることを目的としています。これはおそらくstatコマンドが存在する理由の一部です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top