本節では、所有者およびグループ番号、名前の数、inode番号、サイズ、ならびにアクセス時刻と変更時刻など、ファイルに関する詳細情報を取得するための関数について説明します。
この関数は、ファイル filename1 がファイル filename2 よりも新しい場合に t を返します。filename1 が存在しない場合は、nil
を返します。filename1 は存在するが filename2 が存在しない場合は、t
を返します。それ以外の場合は、各ファイルの最終更新日時を比較します。
以下の例では、ファイル aug-19 が19日に、aug-20 が20日に書き込まれ、ファイル no-file は全く存在しないものとします。
(file-newer-than-file-p "aug-19" "aug-20")
⇒ nil
(file-newer-than-file-p "aug-20" "aug-19")
⇒ t
(file-newer-than-file-p "aug-19" "no-file")
⇒ t
(file-newer-than-file-p "no-file" "aug-19")
⇒ nil
この関数は、前回の呼び出し以降に filename のタイムスタンプが変更された場合、nil 以外の値を返します。ある filename
に対して初めて呼び出された際は、ファイルの最終変更時刻とサイズを記録し、filename が存在する場合は
nil 以外の値を返します。その後、同じ filename
に対して呼び出された際は、現在のタイムスタンプとサイズを記録済みのものと比較し、タイムスタンプまたはサイズ(あるいはその両方)が異なる場合にのみ
nil 以外の値を返します。これは、Lisp
プログラムがファイルの変更時にその都度再読み込みを行いたい場合に有用です。シンボルである必要があるオプション引数 tag を指定すると、サイズおよび変更時刻の比較は、同一のタグを持つ呼び出しに限定されます。
この関数は、ファイル filename
の属性リストを返します。指定したファイルが存在しない場合は、nil
を返します。この関数はシンボリックリンクを辿りません。オプションパラメータ id-format は、属性
UID および GID
の優先フォーマットを指定します(後述)—有効な値は 'string と 'integer です。後者がデフォルトですが、変更を予定しているため、返された UID または GID
を使用する場合は、id-format に nil
以外の値を指定してください。
GNUプラットフォーム上でローカルファイルを操作する場合、この関数はアトミックです。つまり、他のプロセスによってファイルシステムが同時に変更されている場合、この関数は変更前または変更後のいずれかのファイル属性を返します。それ以外の場合、この関数はアトミックではなく、競合状態を検出した際に
nil を返したり、以前と現在のファイル属性が混在した状態を返したりすることがあります。
このリスト内の要素にアクセスするためのアクセサ関数が用意されています。これらのアクセサについては、以下で各要素の説明とともに記載します。
リストの要素は、順に以下の通りです:
t、シンボリックリンク(リンク先の名前)の場合は文字列、テキストファイル(file-attribute-type)の場合は nil。
file-attribute-link-number)。ハードリンクとしても知られる別名は、add-name-to-file 関数を使用して作成できます(ファイル名と属性の変更を参照)。
file-attribute-user-id)となります。ただし、名前付きユーザーに対応しない場合は、値は整数となります。
file-attribute-group-id)。
file-attribute-access-time)として表したものです。このタイムスタンプはcurrent-time形式(Time of
Dayを参照)であり、ファイルシステムのタイムスタンプ分解能に合わせて切り捨てられます。例えば、一部のFATベースのファイルシステムでは最終アクセス日のみが記録されるため、この時刻は常に最終アクセス日の午前0時となります。
file-attribute-modification-time)。これは、ファイルの内容が最後に変更された時刻です。
file-attribute-status-change-time)で表したものです。これは、ファイルの内容以外に、ファイルのアクセスモードビット、所有者およびグループ、ならびにファイルシステムに記録されているその他の情報が最後に変更された時刻です。
file-attribute-size)。
file-attribute-modes)のように、10文字の英字またはハイフンからなる文字列で表されます。
file-attribute-inode-number)は、非負整数です。
file-attribute-device-number)で、整数または2つの整数からなるコンスセルです。後者は、リモートファイルシステムをローカルのものと区別するために、リモートファイルで使用されることがあります。
ファイルのinodeとデバイスを合わせることで、システム上の任意の2つのファイルを区別するのに十分な情報が得られます。これら2つの属性の値が完全に一致するファイルは存在しません。ファイルを一意に識別するこのタプルは、file-attribute-file-identifierによって返されます。
例えば、files.texi のファイル属性は以下の通りです。
(file-attributes "files.texi" 'string)
⇒ (nil 1 "lh" "users"
(20614 64019 50040 152000)
(20000 23 0 0)
(20614 64555 902289 872000)
122295 "-rw-rw-rw-"
t 6473924464520138
1014478468)
そして、結果の解釈は以下の通りです。
nilディレクトリでもシンボリックリンクでもありません。
1名前は1つのみです(現在のデフォルトディレクトリにあるfiles.texiという名前)。
"lh"‘lh’という名前のユーザーが所有しています。
"users"‘users’という名前のグループに属しています。
(1351023123050040152 . 1000000000)最終アクセス日時は2012年10月23日 20:12:03.050040152 UTCです。 (current-time-listがtの場合、このタイムスタンプは(20614 64019 50040
152000)となります。)
(1310720023000000000 . 1000000000)最終更新日時は2001年7月15日 08:53:43.000000000 UTCです。 (current-time-listがtの場合、このタイムスタンプは(20000 23 0
0)となります。)
(1351023659902289872 . 1000000000)最終更新日時は2012年10月23日 20:20:59.902289872 UTCです。 (current-time-listがtの場合、このタイムスタンプは(20614 64555 902289
872000)となります。)
122295長さは122295バイトです。(ただし、一部のバイトがマルチバイトシーケンスに属している場合や、行末形式がCR-LFである場合には、122295文字含まれないことがあります。)
"-rw-rw-rw-"所有者、グループ、およびワールドに対する読み書きアクセスモードを備えています。
t単なるプレースホルダーであり、情報は一切含まれていません。
6473924464520138inode番号は6473924464520138です。
1014478468は、番号が1014478468のファイルシステムデバイス上にあります。
この関数は、ファイル filename
が持つ名前(すなわちハードリンク)の数を返します。ファイルが存在しない場合、この関数は nil
を返します。なお、シンボリックリンクはリンク先のファイルの名前とはみなされないため、この関数には影響しません。この関数はシンボリックリンクを辿りません。
$ ls -l foo* -rw-rw-rw- 2 rms rms 4 Aug 19 01:27 foo -rw-rw-rw- 2 rms rms 4 Aug 19 01:27 foo1
(file-nlinks "foo")
⇒ 2
(file-nlinks "doesnt-exist")
⇒ nil