Как создать список содержимого файлов каталога и подкаталогов с указанием времени создания, добавления, изменения и последнего открытия для каждого файла?

Как создать список содержимого файлов каталога и подкаталогов с указанием времени создания, добавления, изменения и последнего открытия для каждого файла?

У меня Mac, и мне нужно создать список всего содержимого файлов в заданном каталоге и его подкаталогах, а также даты «Создания», «Добавления», «Изменения» и «Последнего открытия» для каждого файла.

Просматривая различные темы, я вижу, как получить данные о создании/добавлении/изменении с помощью команд «ls» или «stat», но я не вижу способа получить информацию о дате последнего открытия для всех файлов рекурсивно.

решение1

  • Создание: Хотя это свойство не является одним из оригинальных свойств файла, включенных в UNIX, оно доступно во многих файловых системах сегодня (включая, что наиболее актуально для MacOS, HFS+), а современные версии инструментов, таких как lsи , statзнают, как получить к нему доступ: ls -U, statиспользует B(задокументировано в man-страницах).
  • Добавлен: Этого не существует как такового. Вы можете использовать время последнего изменения каталога, содержащего файл, чтобы узнать, когда произошло последнее изменение этого каталога, то есть файл был добавлен (создан или перемещен), удален (удален или перемещен) или переименован. Но вы не знаете, какое именно, и получаете информацию только о самом последнем событии.
  • ИзмененныйиПоследний доступ: Это оригинальные статистические данные, которые были доступны для файлов в UNIX с незапамятных времен. Большинство файловых систем и практически все инструменты поддерживают их: ls -u, statиспользует aи m(опять же, как документировано). Обратите внимание, что для сохранения записи на диск при каждом доступе к файлу отслеживание метки времени последнего доступа иногда отключается или отключается условно.

Есть еще один, о котором вы не упомянули, а именно:последнее изменение inode. Это отслеживает, когда в последний раз изменялись метаданные файла, а не его содержимое.

решение2

Вы можете использоватьstatкоманда для вывода информации о файле. Эта команда может вывести список всех четырех временных меток, которые операционная система записывает для файла:

  • %a: время доступа (atime). Это последний раз, когда файл был открыт или иным образом прочитан (например, для анализа или индексации его содержимого).
  • %m: время изменения (mtime). Это последний раз, когда содержимое файла было изменено. Если файл был скопирован или загружен откуда-то еще, то, обновляется ли его mtime в момент копирования, зависит от того, как была сделана копия.
  • %c: время изменения inode (ctime). Это время обновляется всякий раз, когда с файлом происходит что-либо, кроме его чтения: изменение, переименование, перемещение, изменение прав доступа и т. д.
  • %B: время рождения (время создания). Обычно это время создания или загрузки файла, хотя в некоторых приложениях это может отражать время последнего сохранения файла.

Вы можете объединить это сfindкоманда для рекурсивного вывода списка файлов. Например, чтобы вывести список временных меток и имен всех обычных файлов в текущем каталоге, можно использовать:

find . -type f -exec stat -f '%Sa %Sc %Sm %SB %N' {} \;

Связанный контент