現在の環境
$ 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
ModiftとChangeタイムスタンプの違いは何か? を、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
AccessとModifyが変更されています。
・ 現在日付に変更
$ 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
Access、ModifyとChangeが現在時刻に変更されます。
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で表示順を指定する「最後に開いた日」「追加日」は、上記のタイムスタンプとは別なメタデータのようです。
次のコマンドで確認できます。
$ 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 シェルコマンド
$ ./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 シェルファイル
#!/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
参考記事;
以上
