atime, ctime, mtime

Разбирался тут с временными метками файлов в Юниксе, и, как оказалось, найти информацию о том, что же именно происходит с файлами и когда они меняются не так-то просто. Самое более-менее понятное объяснение на Unix Tutorial. Но есть ещё некоторые мелочи.

atime

Проще всего с этим. Тронули файл хоть как-то — метка access time изменилась

ctime

Тут стоит сказать о том, что это не creation time, как это порой переводится. Это change time. И эта метка меняется в том случае, когда меняются мета-данные файла: права, владелец, расположение на файловой системе и пр. Ну и, конечно, когда меняется само содержимое файла.

Интересный момент. Если в Виндоус создать файл (с помощью контекстного меню, например), а затем его открыть в любом текстовом редакторе, то ctime изменится дважды: первый раз при создании, второй — при открытии. Почему так, не совсем понятно. Юникс (та же макОС, например) себя так не ведёт. Вероятно, что редакторы дописывают в файл какие-то мета-данные. Что особенно интересно, делают это единожды. То есть, последующие открытия (без записи, разумеется), причём, даже в разных редакторах, ctime уже не меняют.

mtime

Это modify time. Меняется в том случае, когда меняется содержимое файла. Вроде бы всё просто, но не так, как хотелось бы. Если создать файл, затем его скопировать и куда-то вставить, то у исходного файла и у его копии будет одинаковая метка mtime. Это, с одной стороны, логично — контент-то не менялся с того времени. С другой стороны, вообще не логично, ведь файлы-то разные.

Таким образом получается, что mtime — это время последнего изменения именно содержимого файла. И, если нужно проверять, например, изменения файлов в какой-то папке с определённого момента времени, то лучше проверять ctime, потому что есть вероятность пропустить новые файлы, которые были откуда-то скопированы.

Примеры и чуть больше объяснений можно найти в этом ишью и вот в этом пулреквесте в vinyl-fs.

2017
Популярное