Атрибуты файлов
В этом разделе описаны функции для получения подробной информации о файле, включая номера владельца и группы, число имён, номер inode, размер, а также время доступа и изменения.
- Функция: file-newer-than-file-p filename1 filename2
-
Эта функция возвращает
t, если файл filename1 новее файла filename2. Если 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
- Функция: file-has-changed-p filename tag
Эта функция возвращает не-
nil, если временная метка filename изменилась с момента последнего вызова. При первом вызове для некоторого filename функция записывает время последнего изменения и размер файла и возвращает не-nil, если filename существует. При последующих вызовах для того же filename она сравнивает текущую временную метку и размер с сохранёнными значениями и возвращает не-nilтолько в том случае, если отличается временная метка, размер или и то и другое. Это полезно, если программа на Lisp должна перечитывать файл при каждом его изменении. С необязательным аргументом tag, который должен быть символом, сравнение размера и времени изменения выполняется только для вызовов с одинаковым тегом.
- Функция: file-attributes filename &optional id-format
-
Эта функция возвращает список атрибутов файла filename. Если указанный файл не существует, она возвращает
nil. Эта функция не следует по символическим ссылкам. Необязательный параметр id-format задаёт предпочтительный формат атрибутов UID и GID (см. ниже); допустимые значения —'stringи'integer. Последнее значение используется по умолчанию, но мы планируем изменить это, поэтому, если вы используете возвращённые UID или GID, следует указать для id-format значение, отличное отnil.На платформах GNU при работе с локальным файлом эта функция атомарна: если файловая система одновременно изменяется другим процессом, функция возвращает атрибуты файла либо до изменения, либо после него. В противном случае функция не является атомарной: обнаружив состояние гонки, она может вернуть
nilлибо набор атрибутов, состоящий из значений до и после изменения файла.Для доступа к элементам этого списка предусмотрены функции-аксессоры. Они упоминаются ниже вместе с описаниями соответствующих элементов.
Элементы списка в порядке следования:
-
tдля каталога, строка для символической ссылки (имя, на которое она указывает) илиnilдля текстового файла (file-attribute-type). - Число имён файла (
file-attribute-link-number). Дополнительные имена, также называемые жёсткими ссылками, можно создавать с помощью функцииadd-name-to-file(см. Изменение имён и атрибутов файлов). - UID файла, обычно в виде строки (
file-attribute-user-id). Однако, если ему не соответствует пользователь с именем, значение является целым числом. - Аналогично, GID файла (
file-attribute-group-id). - Время последнего доступа в виде временной метки Lisp (
file-attribute-access-time). Временная метка имеет форматcurrent-time(см. Время суток) и округляется до точности временных меток файловой системы; например, в некоторых файловых системах на основе FAT записывается только дата последнего доступа, поэтому это значение всегда будет соответствовать полуночи дня последнего доступа. - Время последнего изменения в виде временной метки Lisp (
file-attribute-modification-time). Это время последнего изменения содержимого файла. - Время последнего изменения состояния в виде временной метки Lisp (
file-attribute-status-change-time). Это время последнего изменения битов режима доступа файла, его владельца и группы, а также прочих сведений о файле, хранящихся в файловой системе помимо его содержимого. - Размер файла в байтах (
file-attribute-size). - Режимы файла в виде строки из десяти букв или дефисов, как в ‘ls -l’ (
file-attribute-modes). - Неопределённое значение, присутствующее для обратной совместимости.
- Номер inode файла (
file-attribute-inode-number), неотрицательное целое число. - Идентификатор файловой системы для устройства, на котором находится файл (
file-attribute-device-number), целое число или cons-ячейка из двух целых чисел. Последний вариант иногда используется для удалённых файлов, чтобы отличать удалённые файловые системы от локальных.
Номера inode и устройства файла вместе дают достаточно информации, чтобы различить любые два файла в системе: ни у каких двух файлов значения обоих этих атрибутов не могут совпадать. Этот кортеж, уникально идентифицирующий файл, возвращает
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-
имеет только одно имя (имя files.texi в текущем каталоге по умолчанию).
"lh"-
принадлежит пользователю с именем ‘lh’.
"users"-
входит в группу с именем ‘users’.
(20614 64019 50040 152000)-
последний раз использовался 23 октября 2012 года в 20:12:03.050040152 UTC. (Эта временная метка —
(1351023123050040152 . 1000000000), еслиcurrent-time-list—nil.) (20000 23 0 0)-
последний раз изменялся 15 июля 2001 года в 08:53:43.000000000 UTC. (Эта временная метка —
(1310720023000000000 . 1000000000), еслиcurrent-time-list—nil.) (20614 64555 902289 872000)-
состояние файла последний раз изменялось 23 октября 2012 года в 20:20:59.902289872 UTC. (Эта временная метка —
(1351023659902289872 . 1000000000), еслиcurrent-time-list—nil.) 122295-
имеет размер 122295 байт. (При этом файл может содержать не 122295 символов, если некоторые байты входят в многобайтовые последовательности, а также если используется формат конца строки CR-LF.)
"-rw-rw-rw-"-
имеет режим доступа на чтение и запись для владельца, группы и всех остальных.
t-
является лишь заполнителем; он не содержит никакой информации.
6473924464520138-
имеет номер inode 6473924464520138.
1014478468находится на устройстве файловой системы с номером 1014478468.
-
- Функция: file-nlinks filename
-
Эта функция возвращает число имён (то есть жёстких ссылок) файла 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
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Attributes.html