web-dev-qa-db-ja.com

lsを使用して、ファイルのタイムスタンプを変更し、年ではなく時間を表示します

ファイルの日付を明日の21:00に変更したい。タッチを使用しましたが、ls -lと入力すると、ファイルの時間ではなく年が表示されます。

-rw-r--r-- 1 ABCD DEF   0 sept. 30  2014 test01
-r-xr-xr-x 1 ABCD DEF   15 sept. 29 09:26 test02

たとえば、ここでは「2014」ははっきりと見えますが、「21:00」は見えません。奇妙なことに、touch --date "1 hour ago" test01を実行すると正しく表示されますが、touch --date "+1 hour" test01は機能しません。また、emacsでファイルを編集して保存すると、年ではなく時間が表示されます。

それは正常ですか? lsのパラメーターを使用したり、コンピューターの構成を変更したりせずに、この動作を変更するにはどうすればよいですか? (これは挑戦のためです)

4
heydude1

lsには2つの時間表示形式があります。

  • 過去6か月のタイムスタンプの場合:月、日、時、分。
  • その他のタイムスタンプの場合(将来、または6か月以上前から):年、月、日。

目的は、水平方向のスペースを確保することであり、情報でユーザーを圧倒することではありません。 「今年から」を表示することは、現在の年を表示して、それが実際に現在の年であることをユーザーに通知するよりも明白です。非常に古いファイルの場合、正確な時刻が重要になることはめったにありません。将来の日付はまれです。

GNU ls オプション--full-timeがあり、ファイルの時間(年、月、日、時、分、秒、ナノ秒、タイムゾーンオフセット)がいつであるかに関係なく表示されます。オプション--time-styleを使用して出力形式を調整できます。

問題が解決しました。問題は、日付が未来の場合、時間ではなく年が表示されることです。

簡単な例を次に示します。touch filel

-rw-r--r-- 1 ABCD DEF 0 sept. 29 12:01 file

whicは正常です。将来的に日付を15秒に変更しようとしないでください:touch --date "+15 seconds" fileそしてすぐにls -l

-rw-r--r-- 1 ABCD DEF 0 sept. 29  2014 file

そして15秒後、同じls -l与える

-rw-r--r-- 1 rius_b users 0 sept. 29 12:03 file
1
heydude1