0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ファイルの日付について [macOS] timestamp

Posted at

現在の環境

$ vers	# sw_vers を 1行で出力
macOS 26.1 (25B78)

$ date
2025年 12月11日 木曜日 20時05分21秒 JST

$ touch filename  # create new file

・ ファイルの日付について

$ stat -x filename
  File: "filename"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/  nak435)  Gid: (   20/   staff)
Device: 1,15   Inode: 6603545    Links: 1
Access: Thu Dec 11 20:05:37 2025
Modify: Thu Dec 11 20:05:37 2025
Change: Thu Dec 11 20:05:37 2025
 Birth: Thu Dec 11 20:05:37 2025

ModiftChangeタイムスタンプの違いは何か? を、Google AI に聞いた。

macOS(および他のUnix系システム)において、「Modify」と「Change」のタイムスタンプは、異なる種類のファイル更新を記録しています。

タイムスタンプ名 一般的な呼び方 追跡するもの
Modify
(修正)
mtime
(modification time)
ファイルの内容が最後に変更された日時(例:ドキュメントを編集した時)
Change
(変更)
ctime
(change time)
ファイルのメタデータ(inode属性)が最後に変更された日時。これには、アクセス許可(パーミッション)、所有者、ファイル名、またはリンク数の変更が含まれます

主な違い

  • Modify (mtime) はファイルの中身の変更を追跡します
  • Change (ctime) はファイルに関する情報(メタデータ)の変更を追跡します

内容を変更すると両方のタイムスタンプが更新されますが、パーミッションの変更などメタデータのみを変更した場合は、「Change」タイムスタンプのみが更新されます。「Modify」タイムスタンプは手動で設定できますが、「Change」タイムスタンプはシステムカーネルによって自動的に更新されます。

・ Modify を変更

# touch -mt YYYYMMDDHHMM filename
$ touch -mt 202512112000 filename

$ stat -x filename
  File: "filename"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/  nak435)  Gid: (   20/   staff)
Device: 1,15   Inode: 6603545    Links: 1
Access: Thu Dec 11 20:05:37 2025
Modify: Thu Dec 11 20:00:00 2025
Change: Thu Dec 11 20:06:30 2025
 Birth: Thu Dec 11 20:00:00 2025

Modifyが変更されています。
過去日付(時刻)を指定すると、Birthも変更されます。

Changeも変更されていますが、これはシステムマター

・ Access を変更

# touch -at YYYYMMDDHHMM filename
$ touch -at 202512112010 filename

$ stat -x filename
  File: "filename"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/  nak435)  Gid: (   20/   staff)
Device: 1,15   Inode: 6603545    Links: 1
Access: Thu Dec 11 20:10:00 2025
Modify: Thu Dec 11 20:00:00 2025
Change: Thu Dec 11 20:06:30 2025
 Birth: Thu Dec 11 20:00:00 2025

Accessが変更されています。

・ Access と Modify を変更

# touch -amt YYYYMMDDHHMM filename
$ touch -amt 202512112030 filename

$ stat -x filename
  File: "filename"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/  nak435)  Gid: (   20/   staff)
Device: 1,15   Inode: 6603545    Links: 1
Access: Thu Dec 11 20:30:00 2025
Modify: Thu Dec 11 20:30:00 2025
Change: Thu Dec 11 20:07:44 2025
 Birth: Thu Dec 11 20:00:00 2025

AccessModifyが変更されています。

・ 現在日付に変更

$ touch filename  # set timestamp to now

$ stat -x filename
  File: "filename"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/  nak435)  Gid: (   20/   staff)
Device: 1,15   Inode: 6603545    Links: 1
Access: Thu Dec 11 20:08:25 2025
Modify: Thu Dec 11 20:08:25 2025
Change: Thu Dec 11 20:08:25 2025
 Birth: Thu Dec 11 20:00:00 2025

AccessModifyChangeが現在時刻に変更されます。
Birthが未来日付(時刻)だった場合は 同時に変更されます。

・ Birth を変更

Birthだけ変更する場合は、Xcode Command Line ToolsであるSetFileコマンドを使う。

# SetFile -d "MM/DD/YYYY HH:MM:SS" filename
$ SetFile -d "12/11/2025 20:20:00" filename

$ stat -x filename
  File: "filename"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/  nak435)  Gid: (   20/   staff)
Device: 1,15   Inode: 6603545    Links: 1
Access: Thu Dec 11 20:08:25 2025
Modify: Thu Dec 11 20:08:25 2025
Change: Thu Dec 11 20:09:31 2025
 Birth: Thu Dec 11 20:20:00 2025

・ すべてのタイムスタンプを現在日付に変更

# 一旦、Birthを未来日付に更新
$ SetFile -d "12/31/2025 00:00:00" filename

# 現在時刻に変更
$ touch filename  # set timestamp to now

$ stat -x filename
  File: "filename"
  Size: 0            FileType: Regular File
  Mode: (0644/-rw-r--r--)         Uid: (  501/  nak435)  Gid: (   20/   staff)
Device: 1,15   Inode: 6603545    Links: 1
Access: Thu Dec 11 20:09:57 2025
Modify: Thu Dec 11 20:09:57 2025
Change: Thu Dec 11 20:09:57 2025
 Birth: Thu Dec 11 20:09:57 2025

・ Finderでの日付

Finder-sort-0.png

Finderで表示順を指定する「最後に開いた日」「追加日」は、上記のタイムスタンプとは別なメタデータのようです。
次のコマンドで確認できます。

$ mdls -name kMDItemLastUsedDate filename
kMDItemLastUsedDate = (null)

$ mdls -name kMDItemDateAdded filename
kMDItemDateAdded = 2025-12-11 11:05:37 +0000


$ mdls -name kMDItemLastUsedDate filename-2
kMDItemLastUsedDate = 2025-12-10 12:29:04 +0000

$ mdls -name kMDItemDateAdded filename-2
kMDItemDateAdded = 2025-12-09 09:26:43 +0000
項 目 情 報
最後に開いた日 上記kMDItemLastUsedDate
追 加 日 上記kMDItemDateAdded
変 更 日 Modifyタイムスタンプ
作 成 日 Birthタイムスタンプ




・ filestamp シェルコマンド

Finder_list.png

使用例(実行権限付与して)
$ ./filestamp.sh filename*
filename
	Access	 2025-12-11(木)22:29:49
	Modify	 2025-12-11(木)22:33:35
	Change	 2025-12-11(木)22:33:35
	Birth	 2025-12-11(木)14:55:06
	Added	 2025-12-10(水)10:39:30
filename-2
	Access	 2025-12-11(木)22:29:49
	Modify	 2025-12-11(木)22:29:47
	Change	 2025-12-11(木)22:32:45
	Birth	 2025-12-11(木)15:03:36
	LastUsed 2025-12-11(木)15:06:06
	Added	 2025-12-11(木)15:07:12

・ filestamp シェルファイル

filestamp.sh
#!/bin/bash

datetime_fmt='+%Y-%m-%d(%a)%H:%M:%S'

if [ "$#" -eq 0 ]; then
  echo "No arguments exists."
  exit
fi

function show_timestamp() {
    if [ -f "$1" ]; then
        echo $1
    elif [ -d "$1" ]; then
        echo $1 '(Directory)'
    else
        echo "File not found. $1"
        return
    fi

    eval $(stat -s $1)
    echo '	Access	' `date -r $st_atime $datetime_fmt`
    echo '	Modify	' `date -r $st_mtime $datetime_fmt`
    echo '	Change	' `date -r $st_ctime $datetime_fmt`
    echo '	Birth	' `date -r $st_birthtime $datetime_fmt`

    kMDItemLastUsedDate=`mdls -name kMDItemLastUsedDate -raw $1`
    if [[ "$kMDItemLastUsedDate" != "(null)" ]]; then
        echo '	LastUsed' `date -j -f "%Y-%m-%d %H:%M:%S %z" "$kMDItemLastUsedDate" $datetime_fmt`
    fi

    kMDItemDateAdded=`mdls -name kMDItemDateAdded -raw $1`
    if [[ "$kMDItemDateAdded" != "(null)" ]]; then
        echo '	Added	' `date -j -f "%Y-%m-%d %H:%M:%S %z" "$kMDItemDateAdded" $datetime_fmt`
    fi
}

for I; do
    show_timestamp "$I"
done

参考記事;



以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?