GNU/Linux >> Linux の 問題 >  >> Linux

タイムゾーンが異なるファイルで find -mtime が期待どおりに機能しないのはなぜですか?

解決策 1:

タイム ゾーンの問題が厄介な問題である可能性があります。

find . -mtime 7

正確に 7 日前のファイルを検索する必要があります (「7」は 7.000 日から 7.999 日の間を意味し、与えるか取るかを意味し、「古い」は「最後の変更以降」を意味します)。最初のファイルの日付 (2010 年 6 月) から判断すると、7 日以上前のファイルが必要な場合は、

find . -mtime +7

見た目のタイムゾーンが奇妙であることに同意しますが、それは説明できると思います. man stat Sean R が以下で述べているように、time_t が格納されていることは明らかです。何 ls が行っているのはそれを現地時間として表示することであり、その際に現地の夏時間の規則を考慮に入れるのに十分親切です.

私のシステムも同じです:たまたま 3 月から 10 月に該当するファイル時間は +0100 タイムゾーンで表示され、10 月から 3 月に該当するファイル時間は +0000 タイムゾーンで表示されます。これはファイル システムに保存されているためではなく、タイムゾーンファイルは、6月にファイルに触れたときに、冬だったら午前7時ではなく、午前8時だと思っていた時間にそれを行ったであろうことをシステムに伝えているからです。 ls たまたま夏になった時刻を表示するときに、夏に表示されるように表示するだけです.

ls にタイムゾーンがある場合 あなたの地方の慣例によれば、夏でも冬でもない出力、それなら私は間違っています - しかし、私のシステムでは何も見つかりません.

解決策 2:

find では、-mtime は 24 時間単位で機能するため、

-mtime 0 or -mtime -1 mean today
-mtime 3 would mean 3 days old
-mtime +1 means greater than one day old 
-mtime -7 means less than 7 days old

解決策 3:

タイムゾーンの部分をもう少し説明すると (「mtime」の議論は他のコメントで処理されます)...

日付と時刻は、1970 年 1 月 1 日の午前 0 時 (UTC) からの秒数としてファイルに保存されます。つまり、それらに関連付けられたタイムゾーンはありません。その後、プログラムは /etc/timezone のシステム タイムゾーン設定を使用します。 、「TZ」環境変数によってオーバーライドされない限り、その時刻をローカル タイムゾーンで表示するには:

chats:/tmp$ touch foo
chats:/tmp$ ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 06:14 foo
chats:/tmp$ TZ=GMT ls -l foo
-rw-r--r-- 1 jafo jafo 0 Dec  1 13:14 foo
chats:/tmp$

最後の行には午後 1 時 14 分が表示されており、その上の出力では、米国山岳部時間 (GMT-0700) のデフォルトのタイムゾーンを使用している場合、午前 6 時 14 分が表示されていることに注意してください。違いは、TZ 環境変数を GMT に設定した 2 番目の「ls」です。

「stat」を使用して、ファイルに関連付けられたすべての時刻/日付も調べることができます。


Linux
  1. 一部のコマンドでBashプロセス置換が機能しないのはなぜですか?

  2. Avconvを使用したメタデータのマッピングが機能しませんか?

  3. Linux –ロケールEs_mxは機能するがEsは機能しないのはなぜですか?

  1. なぜ`exit&`が機能しないのですか?

  2. 開いているファイルが多すぎるとプッシュ/フェッチでgitが失敗するのはなぜですか

  3. Windows が Linux パーティション内のファイルを認識しないのはなぜですか?

  1. この正規表現が Linux で機能しないのはなぜですか?

  2. pppd の切り離されていないセッションでは Ctrl-C が機能しない

  3. 自動リピートが機能しない