ファイルシステムで最近作成されたファイルを見つける方法は?

ファイルシステムで最近作成されたファイルを見つける方法は?

サイレントインストーラによって生成された最後のファイルが存在するかどうかを検出してサイレントインストーラの完了を追跡しようとしています。これを行う方法はありますか?最も近い場所を見つける方法に多くの回答がありました。修正済みただし、これらのファイルの多くは、インストーラがシステムに追加した順序とは異なる順序で元の作成者によって変更されたため、機能しません。

ベストアンサー1

時間の変更に同意します(aka時間)は* nixファイルシステムで見られる最も移植性の高い機能なので、OPでより詳細にしたいことがあります。

POSIX<sys/stat.h>ファイルシステムの各ファイル、ディレクトリ、およびデバイスについて3つのタイムスタンプを記録します。使用する権利改訂するそして変更。最初の2つは任意の値に設定できます。utimes(拡張としてマークされていますが、広く利用可能です)しかし、最後はそうではありません。utimes最も一般的には更新によって発生する可能性が高いですが、ファイルを移動したり名前をchmod変更したりすることも。

ただし、ファイルが作成されたときの手がかりを探している場合は、時間これがあなたが見つけることができる最高の手がかりです。アクセス時間も便利ですが、一部のファイルシステムは更新しないように設定できます。初めて見て時間

これfindこのプログラム(POSIXにも文書化されています)には、以下を使用するオプションが含まれています。時間:

-ctime N
ファイル状態情報が最後に変更された時刻を初期化時刻から減算して86400で割った場合、マスターはtrueと評価する必要があります(残りは破棄されます)。N

864001日の秒数を示します。N整数(日数)です。一部の実装ではfindより小さな単位が提供されますが、POSIXでは使用できません。

過去1日に変更されたファイルのリストを取得するには、次のように使用できます。

find . -ctime -1 -print

一部の実装では、整数ではなく値を受け入れることができます。Nしかし、ここでPOSIXは明示的です。

説明のどこでもN主な論拠として使用されるため、次のように解釈する必要があります。10進数前にプラス記号('+')またはマイナス記号('-')を選択できます。

したがって、この方向にPOSIX準拠の拡張を持つことは不可能です。他の実装では、時間差を分単位で指定する代替手段を提供できます。findこれがあなたに適用されることを確認するには、お使いのシステムのマニュアルを確認する必要があります。

コメントの1つは、実際のファイル作成時間を取得するために拡張子(非標準とも呼ばれる)を持ついくつかのファイルシステムに言及しました。これは、次のような長年にわたってさまざまなシステムで発生しました。

  • VMS(後で名前変更)オープンな仮想管理システム)、そして作るサポート改訂そして期限切れタイムスタンプ。
  • Windows作る使用する権利そして改訂するタイムスタンプ(名前は似ていますが、更新ルールPOSIXとは異なります)。

より関連性の高い議論があります。Linuxでファイル作成日を取得するには?、これは構造体st_birthtimeのメンバーを表しますstat。これは、2つのOSXのマニュアルページに文書化されています。stat(2)そしてFreeBSDstat(2)およびシステム固有のFreeBSDstat(1)およびオペレーティングシステムstat(1)便利です。 (NetBSDも文書この拡張子)。最新のBSDシステムの機能と呼ばれます。

拡張はそのfindユーティリティでもサポートされています(たとえば、OSXを参照)。検索(1)):

みんな-雨* 出生時間関連は主にIEEE Std 1003.1-2001(「POSIX.1」)の拡張です。

他のシステムにはこの拡張子はありません。議論のため:

  • 返信:st_birthtime著者:Eric Blakeは、WindowsがそれをサポートしているがPOSIXはサポートしていないとCygwinメーリングリストに言及しました。
  • Linux:ファイル作成日を見つける方法は?出版社:スコット一部のファイルシステムは、異なる名前を持つ同様の機能をサポートしていることを指摘してください。

おすすめ記事