
6 か月以上変更されていないすべてのファイルを見つけようとしています。このコマンドを実行しましたが、6 か月前に編集されたすべてのファイルのみが表示されます。
find . -type f -mtime 183 -exec ls -latr {} \;
これを 6 か月以上にするにはどうすればよいでしょうか?
答え1
-mtime 183
は、経過時間を次の 24 時間に切り上げた値が 183 に等しいファイル用です。つまり、経過時間は 182*24*3600 秒 (含まない) から 183*24*3600 秒 (含む) までです (秒は Unix 秒で、地球の 1 日の 86400 番目の部分である可変期間を持ちます。秒の固定期間の ISO 定義ではありません。したがって、すべての日は 86400 秒であり、うるう秒を考慮する必要はありません)。
を使用すると-mtime +183
、次の 24 時間に切り上げられた経過時間が 183 より厳密に大きいファイルが得られるため、経過時間が 183*24*3600 秒より厳密に大きいファイルが得られます。
24時間は必ずしも同じではないことに注意してください日一部の地域で夏時間への切り替えがあるためです。
一部の実装 (FreeBSD、GNU) ではfind
、 も使用できます! -newermt '6 months ago'
。は、odification 時間を引数として指定された ime とmt
比較します。m
t
これにより、6 か月前の同じ月の同じ時間より前に変更されたファイルが返されますが、GNU の場合find
(FreeBSD とは異なり)、DST 調整は行われません (DST が適用されるタイムゾーン)。つまり、UTC タイムゾーンの場合と同じ情報が返されます。現在が 2016-07-01 13:00 (夏時間) の場合、FreeBSD はfind
2016-01-01 13:00 (冬時間) より前に最後に変更されたファイルを報告しますが、GNU はfind
2016-01-01 12:00 (冬時間) より前に最後に変更されたファイルを報告します。月の 29 日、30 日、または 31 日に呼び出され、6 か月前の月にそのような日付がない場合は、バリエーションがある可能性があります。
答え2
日付の値の前に を追加します+
。マニュアルページから:
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
そして
... When find figures out
how many 24-hour periods ago the file was last accessed, any
fractional part is ignored, so to match -atime +1, a file has to
have been accessed at least two days ago.
これは テストを指しますが、 テストおよびテストatime
でも同様です。mtime
ctime