OSX - Как получить время создания и изменения файла из командной строки

При решении какой-либо головоломки программирования я хотел посмотреть, сколько времени мне потребовалось, чтобы написать решение проблемы. Для этого я подумал, что было бы неплохо сравнить дату создания файла с последней датой изменения.

В терминале (OSX) я попробовал следующую команду и был удивлен, увидев одну и ту же дату три раза подряд:

stat my_file.py
16777220 10280844 -rw-r--r-- 1 username staff 0 7214 \
"Dec  5 08:32:39 2015"  \
"Dec  5 08:32:39 2015"  \
"Dec  5 08:32:39 2015"  \
"Dec  5 08:32:39 2015" 4096 16 0 my_file.py

Созданный мной способ изменил файл:

touch my_file.py
vim my_file.py   # <- modify some content
stat my_file.py

Любая идея о том, как получить эти две даты из командной строки?

Уточнение: я не хочу, чтобы время выполнения script выполнялось.

РЕДАКТИРОВАТЬ: проблема заключалась в том, что vim меняет дату создания на сохранение, принятый ответ по-прежнему полностью отвечает на вопрос для тех, кто заинтересован.

Ответ 1

stat сообщает о стандартных датах Unix, последнем времени доступа, времени последней модификации и времени изменения inode (что часто ошибочно принимают за время создания). Mac OS X также поддерживает время создания файла и доступно с помощью команды GetFileInfo:

$ GetFileInfo -d .bash_profile
10/08/2015 09:26:35

Вот более полный пример:

$ ls -l my_file.py
ls: my_file.py: No such file or directory
$ touch my_file.py
$ stat -x my_file.py
  File: "my_file.py"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/     blm)  Gid: (   20/   staff)
Device: 1,5   Inode: 26863832    Links: 1
Access: Sun Dec  6 13:47:24 2015
Modify: Sun Dec  6 13:47:24 2015
Change: Sun Dec  6 13:47:24 2015
$ GetFileInfo my_file.py
file: "/Users/blm/my_file.py"
type: "\0\0\0\0"
creator: "\0\0\0\0"
attributes: avbstclinmedz
created: 12/06/2015 13:47:24
modified: 12/06/2015 13:47:24
$ echo hello >my_file.py
$ stat -x my_file.py
  File: "my_file.py"
  Size: 6            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/     blm)  Gid: (   20/   staff)
Device: 1,5   Inode: 26863832    Links: 1
Access: Sun Dec  6 13:47:24 2015
Modify: Sun Dec  6 13:47:35 2015
Change: Sun Dec  6 13:47:35 2015
$ GetFileInfo my_file.py
file: "/Users/blm/my_file.py"
type: "\0\0\0\0"
creator: "\0\0\0\0"
attributes: avbstclinmedz
created: 12/06/2015 13:47:24
modified: 12/06/2015 13:47:35
$ cat my_file.py
hello
$ stat -x my_file.py
  File: "my_file.py"
  Size: 6            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/     blm)  Gid: (   20/   staff)
Device: 1,5   Inode: 26863832    Links: 1
Access: Sun Dec  6 13:47:54 2015
Modify: Sun Dec  6 13:47:35 2015
Change: Sun Dec  6 13:47:35 2015
$ GetFileInfo my_file.py
file: "/Users/blm/my_file.py"
type: "\0\0\0\0"
creator: "\0\0\0\0"
attributes: avbstclinmedz
created: 12/06/2015 13:47:24
modified: 12/06/2015 13:47:35

Обратите внимание, что использование vim для проверки этого может вводить в заблуждение, потому что vim будет записывать измененный файл в новый временный файл, а затем переименовывать старый и новый, так что время создания будет обновляться до тех пор, пока файл был написан. См. этот пост для обхода, который я придумал для этого.

Ответ 2

Как вы уже определили, реальным виновником было то, что vim сбрасывает все 4 штампа даты.

Но чтобы ответить на ваш первоначальный вопрос, вот форматирование stat для Mac OSX, в котором будут четко указаны 4 даты-времени (включая Creation/Birth and Modify):

stat -f "Access (atime): %Sa%nModify (mtime): %Sm%nChange (ctime): %Sc%nBirth  (Btime): %SB" file.txt

Access (atime): Nov 16 19:44:55 2017
Modify (mtime): Nov 16 19:44:25 2017
Change (ctime): Nov 16 19:44:48 2017
Birth  (Btime): Nov 16 19:44:05 2017