2

Дано

  • каталог
  • шаблон sh, который выдает подмножество файлов непосредственно в этом каталоге (например, * .log)
  • шаблон sh, который может, учитывая имя файла,

Какой самый быстрый способ (в ksh) получить для каждого файла, отфильтрованного по шаблону:

  • его имя
  • дата и время его последнего изменения (т. е. текст добавлен)
  • дата и время, когда он был создан (предположим, что он был создан в каталоге, когда мы к нему обращались)

В идеале это будет работать на обоих:

  • AIX 6100-04-03-1009
  • Linux 2.6.18
  • SunOS 5.10

2 ответа2

2

Узел файловой системы Posix обычно имеет три атрибута времени:

  • atime (время доступа) - когда файл последний раз читался
  • mtime (время модификации) - когда оно было записано в последний раз.
  • ctime (время изменения) - когда изменился его индекс (метаданные).

ctime часто неправильно понимается как время создания, а иногда и так, что приводит в замешательство людей.

В оболочках POSIX нет стандартного способа извлечения этих трех атрибутов, и вы будете зависеть от команды ls . ls -l $file по умолчанию показывает время модификации.

  • ls -lc $file показывает ctime
  • ls -lu $file показывает atime

Рекомендуется использовать ls --time-style=full-iso или другой формат iso для согласованного вывода, если вы работаете в системе GNU/linux.

В Perl и других скриптовых языках проще выполнить stat() для файла и получить доступ к его атрибутам. В Perl даже есть операторы -M , -A и -C которые возвращают mtime , atime и ctime для объекта файловой системы. Обратите внимание на временной сдвиг, хотя. Perl имеет тенденцию сообщать время относительно времени запуска процесса.

0

Извиняюсь за то, что не написал для вас awk/sed, но команда stat предоставит время доступа, изменения и изменения. Это сработает для вас. Я не уверен, что это работает в AIX, у меня нет доступа к этому в настоящее время.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .