ls -lrtが最後の修正年を返した場合は完全にランダムに見えるのはなぜですか?
質問
これは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
コマンドが存在する理由の一部です。