find
がファイルを解釈する理由に頭を悩ませるのに苦労しています具体的には、-mtime +1
が48時間未満のファイルを表示しない理由がわかりません。
テスト例として変更日が異なる3つのテストファイルを作成しました。
[root@foobox findtest]# ls -l total 0 -rw-r--r-- 1 root root 0 Sep 25 08:44 foo1 -rw-r--r-- 1 root root 0 Sep 24 08:14 foo2 -rw-r--r-- 1 root root 0 Sep 23 08:14 foo3
次に、-mtime +1
スイッチを使用してfindを実行しました。次の出力:
[root@foobox findtest]# find -mtime +1 ./foo3
次に、-mmin +1440
でfindを実行すると、次の出力が得られました:
[root@foobox findtest]# find -mmin +1440 ./foo3 ./foo2
findのmanページによると、これは予想される動作であると理解しています:
-mtime n File’s data was last modified n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretation of file modification times. -atime n File was last accessed n*24 hours ago. 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.
これはまだ私には意味がありません。したがって、ファイルが1日、23時間、59分、59秒前の場合、find -mtime +1
はそれをすべて無視し、1日、0時間、0分として扱います。 、および0秒経過していますか?その場合、技術的には1日経過していないため、無視されますか?
計算しません…計算しません…。
コメント
- 最初は私も面白そうに見えましたが、ファイルの経過時間を整数日で測定すると考えると、正確に測定されます。 'が期待すること。 ' 1日経過したファイルは提供されません。 int(1.99)日経過したファイルは、> 1ではありません。
- 人間が口語的に年齢をどのように扱うかを考えてください。誰かが79.9歳である場合、あなたは彼らが79歳であると言います。したがって、79歳以上の人間を探している場合は、> 79.99999歳、つまり>の人間を探しています。 = 80歳。人々は年齢を整数と見なし、それを切り捨てて、各年齢を範囲と見なします。
回答
まあ、簡単な答えは、おそらく、findの実装はPOSIX / SuS標準に準拠していることです。これは、このように動作する必要があることを示しています。 SUSv4 / IEEE Std 1003.1、2013 Edition、 “find” からの引用:
-mtime n
初期化時間から差し引かれた
ファイル変更時間を86400で割った値(余りは破棄されます)がnの場合、プライマリはtrueと評価されます。
(そのドキュメントの他の場所では、n
は実際には+n
である可能性があり、その意味は「より大きい」)。
標準がそのように動作することを規定している理由については、昔、プログラマーは怠惰であるか、それについて考えていなかったと思います。コード(current_time - file_time) / 86400
。C整数演算は余りを破棄します。スクリプトはその動作に応じて開始されたため、標準化されました。
指定された動作も移植可能です。 (時刻ではなく)変更日のみを保存した架空のシステムに。そのようなシステムが存在したかどうかはわかりません。
コメント
- findは、クリーンアップジョブのみを実行するように明確に設計されています。
回答
-mtime
の引数は、
ファイルの経過時間の1日。-mtime +n
は厳密により大きい場合、-mtime -n
は厳密に未満。
Bashを使用すると、より直感的に実行できることに注意してください。
$ find . -mmin +$((60*24)) $ find . -mmin -$((60*24))
それぞれ24時間より古いファイルと新しいファイルを検索します。
(解決が必要な場合は、-mtime
に小数の引数を入力するよりも簡単です。時間または分。)
コメント
- 人間が読めるサイズでchrでこれらのファイル(通常のみ)を一覧表示するにはonological order、do
$ find . -type f -mmin -$((60*24)) -exec ls -halt {} +
- これは、24時間前に、これらのコマンドの両方が1分間のウィンドウ内のファイルを見逃してしまうという点でも同じ効果があります。 。
-
$(())
はプレーンシェル算術構文であり、'はBashに固有のものではありません。 pubs.opengroup.org/onlinepubs/009695399/utilities/ … - @JosipRodin No 、必ずしも真実ではありません!
This chapter describes the syntax of that command language as it is used by the sh utility and [...]
。 Bashは"拡張" SHであるため、この構文をサポートしていますが、他の一部のシェルはサポートしていません' t、例: csh / tcsh。 - @ t0r0X私のポイントは、'はバシズムではなく、ダッシュとzshで機能し、その他は従来の機能として機能するということでした。
/bin/sh
。