ls -t
とls -f
は、ディレクトリの下にあるファイルとサブディレクトリのさまざまな並べ替えを提供します。
- タイムスタンプ、変更時刻、ファイルの作成時刻の違いは何ですか?
- コマンドを使用してこれらの種類の情報を取得および変更するにはどうすればよいですか?
- ファイルが他のファイルより「新しい」と人々が言うのはどのような種類の情報ですか?
- 情報の種類を変更してもファイルは変わりませんか?
たとえば、誰かが次のように書いているのを見ました:
デフォルトでは、rsyncプログラムは、ファイルのサイズとタイムスタンプが異なるかどうかのみを確認します。どのファイルが新しいかは関係ありません。異なる場合は、上書きされます。 「–update」フラグをrsyncに渡すと、ソース上のファイルよりも新しい場合に、宛先のファイルをスキップしますが、それらが同じタイプのファイルである場合に限ります。これは、たとえば、ソースファイルが通常のファイルで、宛先がシンボリックリンクの場合、タイムスタンプに関係なく、宛先ファイルが上書きされることを意味します。
ちなみに、ここでのファイルタイプは、pdf、jpg、htm、txtなどのタイプではなく、通常のファイルとsimlinkのみを意味しますか?
コメント
回答
「タイムスタンプ」には3種類あります。
- アクセス-最後ファイルが読み取られた時刻
- 変更-ファイルが最後に変更された時刻(コンテンツが変更された時刻)
- 変更-ファイルのメタデータが最後に変更された時刻(権限など)
この情報を表示するには、一部である stat
を使用できます。 coreutilsの。
stat
はさらにいくつかを表示しますデバイス、iノード、リンクなどの情報。
この種の情報は、ファイルシステムとマウントオプションに大きく依存することに注意してください。たとえば、noatime
オプションを使用してパーティションをマウントした場合、アクセス情報は書き込まれません。
タイムスタンプを変更するユーティリティは。変更するタイムスタンプを決定し(たとえば、アクセス時間の場合は-a、変更時間の場合は-m)、新しい指定されたタイムスタンプの解析に影響を与えるための引数がいくつかあります。詳細については、 man touch
を参照してください。
touch
は、cp -u
と組み合わせると便利です(「ソースファイルが宛先ファイルよりも新しい場合、または宛先ファイルがない場合にのみコピーする」)または空のマーカーファイルを作成してください。
コメント
- ありがとうございます! rsyncコマンドの場合、"では'どのファイルが新しいかは関係ありません"、 " newer "とは、どの種類のタイムスタンプを意味するのでしょうか。また、補足として、rsyncが気にするファイルの種類は、pdf、jpg、htm、txtなどの種類ではなく、通常のファイルとsimlinkのみを意味しますか?
- 一般的に、ファイルは"変更された"タイムスタンプです。たとえば、
ls -l
から表示されるもの。また、ファイルタイプは、ファイルとシンボリックリンク(またはディレクトリやデバイスなどの他のタイプのファイル)を指します。 ファイル内のデータの種類(テキストとjpegなど)はわかりません。 - @Timそのコンテキストでは' s変更されたタイムスタンプ。 rsyncは、'がファイルをバックアップするかどうかを決定するときに、'ソースファイルかどうかを確認しないと言っています。既存のバックアップ(バックアッププログラムで一般的)よりも最近変更されたもの。ファイルのサイズや変更時間が異なるかどうかを確認し、ある場合はバックアップします。
- ファイルが最初に作成されたのはいつかを知るにはどうすればよいですか?この情報はどこかに保持されていますか、それとも更新で失われますか?つまり、ファイルが存在していた期間はどれくらいですか。
- stat(2)のmanページでは、次の場合について詳しく説明しています。これらのタイムスタンプが変更されます。
回答
echoxの回答は有効ですが、ファイルに関する情報を追加したい作成時間。
ファイルシステムのサポート
一部のファイルシステムは、作成時間(または誕生時間)に関するiノードの追加エントリをサポートします。 ext4がこの機能をサポートしていることを知っています。また、 JFSとBTRFS もサポートしています。
ただし、ほとんどのツールとAPIは、この追加情報を読み取るためにまだ更新されていません。そのため、存在する可能性はありますが、アクセスできません。
たとえば、Ubuntu 12.04 LTSでは、今日作成したファイルに対して次のようになります。
$ echo Just another test > /tmp/mytest $ sleep 3 $ touch /tmp/mytest $ sleep 2 $ cat /tmp/mytest > /dev/null $ stat /tmp/mytest [...] Access: 2012-06-05 13:33:44.279774711 +0200 Modify: 2012-06-05 13:33:34.611893317 +0200 Change: 2012-06-05 13:33:34.611893317 +0200 Birth: - $ sudo debugfs -R "stat /tmp/mytest" /dev/sda1 [...] ctime: 0x4fcdee8e:91e30114 -- Tue Jun 5 13:33:34 2012 atime: 0x4fcdee98:42b417dc -- Tue Jun 5 13:33:44 2012 mtime: 0x4fcdee8e:91e30114 -- Tue Jun 5 13:33:34 2012 crtime: 0x4fcdee46:01258f1c -- Tue Jun 5 13:32:22 2012 [...]
出力が正しくないように見えますが、新しいstat関数にbirthフィールドがあることがわかります。また、debugfsを介して情報を取得できます(ext4ファイルシステムではcrtime)。
statxサポート
カーネル4.11以降、Y2038またはネットワークのサポートの向上に加えて、新しいstatxシステムコールが追加されました。ファイルシステムには、btime
や誕生時間(作成時間)アクセスなどのいくつかの追加機能もあります。 ext4のサポートは、同じカーネルリリース4.11に含まれている必要があります。
以降のカーネルリリースでは、この新しいシステムコールにサポートを追加するパッチがあります。カーネル4.13のBTRFSとF2FS、4.14のSMB3、4.15のGFS2、4.16のNFSなど。
今後のglibcは、このインターフェースを照会するための関数呼び出しを提供します( glibc statxサポートに関するPhoronixニュース)。そのため、ユーザースペースでのこの機能のサポートは間もなく期待できます。
コメント
- Windowsからのファイルでbtimeがそのまま残るかどうかを知っていますか(作成時間)はext4に移動され、その逆も同様です。
- @paradroid申し訳ありませんが答えはわかりません。 LinuxでNTFSからext4にファイルをコピーする場合、作成時間をサポートしている場合はNTFSドライバーを調べる必要があります。 Windowsの場合は、Windows用のext4ドライバーを調べる必要があります。
も参照してください。