「find .-daystart -mtime」と「find .-mtime」の違いは何ですか?

「find .-daystart -mtime」と「find .-mtime」の違いは何ですか?

次の違いは何ですか -

find . -daystart -mtime +5

そして

find . -mtime +5

テストしてみると同じ結果が出ました。

それを使用するとどのような利点がありますか-daystart?この分野初心者なのに親切なアドバイスをお願いします。

答え1

基準点が現在時刻(findランタイム)ではなく真夜中になるようにファイルの寿命を比較する方法を変更します。

たとえば、今は2022年7月8日午前11時12分頃です。次のファイルを検討してください。

$ touch -d '2022-07-08 09:00' this_morning                #       2 h old
$ touch -d '2022-07-07 23:55' yesterday_before_midnight   #      11 h old
$ touch -d '2022-07-07 09:00' yesterday_morning           # 1 d + 2 h old

-mtime 0一日中文書を作成しません。デフォルトでは、現在の時刻と比較して過去24時間の期間が提供されます。

$ find . -type f -mtime 0
./yesterday_before_midnight
./this_morning

これは-daystartカレンダーの日付を見るのと似ています。-daystart -mtime 0「0日前」ファイルが与えられると、つまり今日から始まります。

$ find . -type f -daystart -mtime 0
./this_morning

同様に、少なくとも「1日」(つまり24時間以上)を過ぎたファイルの場合:

$ find . -mtime +0
./yesterday_morning

そして昨日またはそれ以前:

$ find . -daystart -mtime +0
./yesterday_before_midnight
./yesterday_morning

これを確認するもう1つの方法は、-daystartファイルタイムスタンプと現在時刻の間の深夜数を計算することです。

()修飾子は「厳密に大きい」(「より小さい」)を意味し、/の規則は、findがファイルの寿命の24時間期間数を計算し、すべての小数部を削除することです。したがって、最終的な意味は「少なくとも0」ではなく、「少なくとも1」です。+N-N-atime-mtime+0

POSIX の説明は-mtime次のとおりです。

-m時間 N
ファイル変更時間を初期化時間から減算して86400で割った場合(残りはすべて破棄)、デフォルトの用語はtrueと評価する必要があります。N

したがって、デフォルトのタイムライン(除外-daystart)は次のようになります。

...-|-- age 2 days --|-- age 1 day ---|-- age 0 days --|
    ^                ^                ^                ^
  72 h ago        48 h ago         24 h ago          current time

これにより、-daystart基準点は真夜中に移動します。

...-|-- age 2 days --|-- age 1 day ---|-- age 0 days --|
    ^                ^                ^                ^
  start of         start of        last midnight /    next midnight /
  the day before   yesterday       start of today     end of today
                  

(将来、ファイルの負の時間を取得できますが、マイナス記号は異なる意味を持つため、直接指定することはできません。しかし、それを使用することができ、後で修正されたファイルを提供するか、-mtime -0明日-daystart -mtime -0または後で修正されたファイルを提供してください。)

偶然にも/と一緒に作業すると、-daystart1日の終わりから計算が始まります。-amin-mmin

$ touch -d '12:00' today_1200.txt   # noon today
$ touch -d '23:00' today_2300.txt   # late evening today
$ find . -type f -daystart -mmin +120 
./today_1200.txt
$ find . -type f -daystart -mmin -120
./today_2300.txt
$ find . -type f -daystart -mmin -$((13*60))
./today_2300.txt
./today_1200.txt

(23:00は1日終了から120分以内、12:00は1日終了から120分以上です。どちらも1日終了から13*60分以内です。)

これマニュアルページもちろん-daystart

時間は24時間前ではなく、今日から測定されます。

これはやや奇妙な表現のように聞こえます。彼らは終日の期間を提示しますが、表現を見るとゼロ基準点を表すように聞こえます。デフォルトでは、この時間は現在の時間になり、上記の-daystartように今日の終わりに移動します。だから私の考えでは、「現在の時間ではなく、今日の終わりから時間を測定する」という表現がより明確です。

関連情報