86

Debian GNU/Linux 6.0 で Bash を使用しています。ファイルの作成日時を取得することはできますか? 変更日時ではありません。 ls -lh a.txtどちらも変更時間をstat -c %y a.txt与えるだけです。

4

13 に答える 13

90

残念ながら、POSIX標準で定義されているように、ファイルごとに3つの異なる時間値しか保存されていないため、一般的にはクエストを実行することはできません(基本定義セクション 4.8 File Times Updateを参照)

各ファイルには、3 つの異なるタイムスタンプが関連付けられています。最終データ アクセス時刻、最終データ変更時刻、およびファイル ステータスの最終変更時刻です。これらの値は、 <sys/stat.h>で説明されているように、ファイル特性構造体 struct statで返されます。

編集:以下のコメントで述べたように、使用されるファイルシステムによっては、メタデータにファイルの作成日が含まれる場合があります。ただし、そのような情報の保存は標準的ではないことに注意してください。それによっては、実際に使用されているファイルシステムが何らかの形でそれを保存する場合に、別のファイルシステムに移動する際に移植性の問題が発生する可能性があります。

于 2013-02-12T21:41:51.750 に答える
27

ミキラの答えは良いです。彼が言ったのと同じように事実。

[jason@rh5 test]$ stat test.txt
  File: `test.txt'
  Size: 0               Blocks: 8          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 588720      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/   jason)   Gid: (  500/   jason)
Access: 2013-03-14 01:58:12.000000000 -0700
Modify: 2013-03-14 01:58:12.000000000 -0700
Change: 2013-03-14 01:58:12.000000000 -0700

ファイルが最初に作成されたことを確認する場合は、一連のファイルを作成するときにシステム日付を追加することでファイル名を構成できます。

于 2013-03-14T09:10:08.103 に答える
15

パフォーマンス上の理由からファイルシステムを noatime でマウントしている場合、atime は作成時刻を表示する可能性が高いことに注意してください。noatime を使用すると (ファイルが読み取られるたびにディスクへの書き込みがなくなるため) パフォーマンスが大幅に向上するため、必要な結果が得られる賢明な構成オプションである可能性があります。

于 2013-03-14T04:36:27.780 に答える
7

通常、作成日時は保存されません。いいえ、できません。

于 2013-02-12T21:34:57.160 に答える
5

statを使用して作成時間 (別名誕生時間)を検索し、 findを使用して一致させることもできます。
最終更新時刻を示すこれらのファイルがあります。

$ ls -l --time-style=long-iso | sort -k6
total 692
-rwxrwx---+ 1 XXXX XXXX 249159 2013-05-31 14:47 Getting Started.pdf
-rwxrwx---+ 1 XXXX XXXX 275799 2013-12-30 21:12 TheScienceofGettingRich.pdf
-rwxrwx---+ 1 XXXX XXXX  25600 2015-05-07 18:52 Thumbs.db
-rwxrwx---+ 1 XXXX XXXX 148051 2015-05-07 18:55 AsAManThinketh.pdf

以下のように検索を使用して、特定の時間枠内に作成されたファイルを検索するには。
明らかに、ファイルシステムはファイルの誕生時刻を知っています:

$ find -newerBt '2014-06-13' ! -newerBt '2014-06-13 12:16:10' -ls 
20547673299906851  148 -rwxrwx---   1 XXXX XXXX   148051 May  7 18:55 ./AsAManThinketh.pdf
1407374883582246  244 -rwxrwx---   1 XXXX XXXX   249159 May 31  2013 ./Getting\ Started.pdf


stat を使用してこれを確認できます。

$ stat -c "%w %n" * | sort
2014-06-13 12:16:03.873778400 +0100 AsAManThinketh.pdf
2014-06-13 12:16:04.006872500 +0100 Getting Started.pdf
2014-06-13 12:16:29.607075500 +0100 TheScienceofGettingRich.pdf
2015-05-07 18:32:26.938446200 +0100 Thumbs.db


stat man ページは %w を説明しています:

%w     time of file birth, human-readable; - if unknown
于 2015-05-07T18:31:23.563 に答える
1

本当にそれを達成したい場合は、inotifywaitのようなファイル監視を使用できます。

ディレクトリを監視し、ファイル作成に関する情報をそのディレクトリの外の別のファイルに保存します。

while true; do
  change=$(inotifywait -e close_write,moved_to,create .)
  change=${change#./ * }
  if [ "$change" = ".*" ]; then ./scriptToStoreInfoAboutFile; fi
done

作成時刻は保存されないため、inotify をベースに独自のシステムを構築できます。

于 2015-02-26T16:56:21.233 に答える