如何修改文件的 “創建時間” 和 “修改時間” (macOS, Linux, Windows) 2023 修正版
請訪問原文鏈接:https://sysin.org/blog/how-to-change-file-date/,查看最新版。原創作品,轉載請保留出處。
作者主頁:www.sysin.org
1. macOS(創建時間,修改時間)
圖形界面(GUI)
在 macOS 中,點擊文件右鍵 “顯示簡介”,顯示 “創建時間” 和 “修改時間”。
在 Finder(訪達)中,除了上述兩個時間,同時會有 “上次打開日期” 和 “添加日期” 這兩個特殊的文件屬性。“上次打開日期” 記錄了上次打開這個文件的最后時間,無論是否編輯和更改文件內容。“添加日期” 記錄了文件在當前位置產生的時間,比如是新創建的一個文件,該時間等於創建時間,如果是復制的文件,或者通過網絡下載的文件,該時間只是在當前位置產生的時間,與創建時間無關。這兩個特殊的文件屬性默認無法修改。
修改 “創建時間” 和 “修改時間”:
推薦使用這個 App:A Better Finder Attributes(商業軟件,自行搜索),操作簡單便捷。
終端(Terminal)
在 Darwin 系統部分(Darwin 一般是指 macOS 的命令行部分),類似於 Linux 有 atime、mtime 和 ctime,但是還多了 birthtime 即創建時間。
直接使用 stat 命令可以查看文件時間屬性,可以看到有 4 個時間,但是不友好,沒法直接辨別。其實分別是:Access、Modify、Change 和 Birth。
但作為正統 Unix 系統,Darwin 的 stat 命令有額外的參數:
現在加上 -x 參數可以看到 Access、Modify、Change 和 Birth 四個時間。
之前的舊版系統中需要 -s 參數才能顯示 birthtime。
# sysin @ macOS in ~/Desktop [17:32:20]
$ stat sysin.txt
16777225 9617704 -rw-r--r-- 1 sysin staff 0 0 "Feb 2 17:32:28 2023" "Feb 2 17:32:28 2023" "Feb 2 17:32:28 2023" "Feb 2 17:32:28 2023" 4096 0 0 sysin.txt
# sysin @ macOS in ~/Desktop [17:32:32]
$ stat -x sysin.txt
File: "sysin.txt"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: ( 501/ sysin) Gid: ( 20/ staff)
Device: 1,9 Inode: 9617704 Links: 1
Access: Thu Feb 2 17:32:28 2023
Modify: Thu Feb 2 17:32:28 2023
Change: Thu Feb 2 17:32:28 2023
Birth: Thu Feb 2 17:32:28 2023
# sysin @ macOS in ~/Desktop [17:32:39]
$ stat -s sysin.txt
st_dev=16777225 st_ino=9617704 st_mode=0100644 st_nlink=1 st_uid=501 st_gid=20 st_rdev=0 st_size=0 st_atime=1675330348 st_mtime=1675330348 st_ctime=1675330348 st_birthtime=1675330348 st_blksize=4096 st_blocks=0 st_flags=0
修改時間可以使用 touch 和 setfile 命令
touch(同 Linux,修改時間 atime 和訪問時間 mtime,無 “創建時間”)
# 修改 “修改時間”
touch -m -t YYYYMMDDhhmm filename
# 例如
touch -mt 202305181505 sysin.txt
# 修改 “訪問時間和修改時間”
touch -t YYYYMMDDhhmm filename
# 例如
touch -t 202305191505 sysin.txt
# 釋義
YYYY 年 - 四位數
MM 月 - 兩位數
DD 日 - 兩位數
hh 小時 - 兩位數
mm 分鍾 - 兩位數
實例
# sysin @ macOS in ~/Desktop [17:32:50]
$ touch -mt 202305181505 sysin.txt
# sysin @ macOS in ~/Desktop [17:34:18]
$ stat -x sysin.txt
File: "sysin.txt"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: ( 501/ sysin) Gid: ( 20/ staff)
Device: 1,9 Inode: 9617704 Links: 1
Access: Thu Feb 2 17:32:28 2023 #沒有變化
Modify: Thu May 18 15:05:00 2023
Change: Thu Feb 2 17:34:18 2023 #變更為命令執行的時間
Birth: Thu Feb 2 17:32:28 2023 #沒有變化
# sysin @ macOS in ~/Desktop [17:34:24]
$ touch -t 202305191505 sysin.txt
# sysin @ macOS in ~/Desktop [17:36:13]
$ stat -x sysin.txt
File: "sysin.txt"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: ( 501/ sysin) Gid: ( 20/ staff)
Device: 1,9 Inode: 9617704 Links: 1
Access: Fri May 19 15:05:00 2023
Modify: Fri May 19 15:05:00 2023
Change: Thu Feb 2 17:36:13 2023 #變更為命令執行的時間
Birth: Thu Feb 2 17:32:28 2023 #沒有變化
setfile(創建時間和修改時間)
需要安裝 Xcode command line tools(命令:xcode-select --install)
setfile
Usage: SetFile [option...] file...
-a attributes # attributes (lowercase = 0, uppercase = 1)*
-c creator # file creator
-d date # creation date (mm/dd/[yy]yy [hh:mm[:ss] [AM | PM]])*
-m date # modification date (mm/dd/[yy]yy [hh:mm[:ss] [AM | PM]])*
-P # perform action on symlink instead of following it
-t type # file type
-
修改創建日期:
setfile -d mm/dd/yy hh:mm:ss filename
示例:setfile -d '1/1/2023 18:18:0' sysin.txt
-
修改修改日期:
setfile -m mm/dd/yy hh:mm:ss filename
示例:setfile -m '1/1/2023 20:18:0' sysin.txt
實例
# sysin @ macOS in ~/Desktop [17:44:44]
$ setfile -d '1/1/2023 18:18:0' sysin.txt
# sysin @ macOS in ~/Desktop [17:44:49]
$ stat -x sysin.txt
File: "sysin.txt"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: ( 501/ sysin) Gid: ( 20/ staff)
Device: 1,9 Inode: 9617704 Links: 1
Access: Fri May 19 15:05:00 2023 #無變化
Modify: Fri May 19 15:05:00 2023 #無變化
Change: Thu Feb 2 17:44:49 2023 #變更為命令執行的時間
Birth: Sun Jan 1 18:18:00 2023
# sysin @ macOS in ~/Desktop [17:44:51]
$ setfile -m '1/1/2023 20:18:0' sysin.txt
# sysin @ macOS in ~/Desktop [17:45:09]
$ stat -x sysin.txt
File: "sysin.txt"
Size: 0 FileType: Regular File
Mode: (0644/-rw-r--r--) Uid: ( 501/ sysin) Gid: ( 20/ staff)
Device: 1,9 Inode: 9617704 Links: 1
Access: Fri May 19 15:05:00 2023 #無變化
Modify: Sun Jan 1 20:18:00 2023
Change: Thu Feb 2 17:45:09 2023 #變更為命令執行的時間
Birth: Sun Jan 1 18:18:00 2023 #無變化
2. Linux(修改時間,訪問時間)
這里僅描述 shell 中的情形,圖形界面中未有關注。
注意:Linux(包括傳統 Unix)中沒有 “創建(creation)” 時間的概念。
查看文件時間信息(stat 命令)
現代 Linux 已經可以顯示 Birth
,即 “創建(creation)” 時間。
# 創建一個測試文件
# root @ A9 in ~ [17:59:07]
$ touch sysin.txt
# 使用 stat 命令查看文件時間信息
# root @ A9 in ~ [17:59:12]
$ stat sysin.txt
File: sysin.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 802h/2050d Inode: 201327432 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-02-02 17:59:12.688566820 +0800
Modify: 2023-02-02 17:59:12.688566820 +0800
Change: 2023-02-02 17:59:12.688566820 +0800
Birth: 2023-02-02 17:59:12.688566820 +0800
有如下三種時間
- Access: ATime —— 文件的最近訪問時間。只要讀取時間,ATime 就會更新。
- Modify: MTime —— 文件的內容最近修改的時間當文件進行被寫的時候,CTime 就會更新。
- Change: CTime —— 文件屬性最近修改的時間當文件的目錄被修改,或者文件的所有者,權限等(包括文件內容被修改)被修改時 CTime 也就會更新。
touch 修改時間
......
請訪問原文鏈接:https://sysin.org/blog/how-to-change-file-date/,查看最新版。
......
Change: CTime 沒有直接修改方法,最簡單的辦法是修改系統時間:
......
請訪問原文鏈接:https://sysin.org/blog/how-to-change-file-date/,查看最新版。
......
3. Windows(創建時間,修改時間,訪問時間)
圖形界面
點擊一個文件右鍵 “屬性” 即可查看文件的時間屬性,可以看到有 “創建時間”、“修改時間” 和 “訪問時間” 三個屬性。
- 創建時間:該文件在本載體本地址上創建的時間
- 修改時間:在屬性中保存的最后一次修改的時間
- 訪問時間:在屬性中保存的最后一次訪問的時間
“創建時間” 和 “修改時間” 比較好理解,但 “訪問時間” 似乎有點特殊,查看文件屬性、打開文件查看,甚至設置 “只讀”、“隱藏” 屬性都不會改變 “訪問時間”。只有在對文件進行編輯后訪問時間才會改變。這也就是我們會發現訪問時間與修改時間是一樣的原因。
修改時間的工具:
......
請訪問原文鏈接:https://sysin.org/blog/how-to-change-file-date/,查看最新版。
......
命令行修改
CMD:
#修改當前系統時間
date 2021/01/01
time 10:59:30
#修改時間,注意是連續兩個英文逗號
copy 文件名 +,,
#修改時間和訪問時間,注意是連續兩個英文句號
copy 文件名 +..
# 注意修改完畢需要將系統時間修改過來(或者等待 NTP 同步)
小技巧:在文件夾上添加 “命令提示符” 右鍵快捷訪問菜單
......
請訪問原文鏈接:https://sysin.org/blog/how-to-change-file-date/,查看最新版。
......
Powershell(推薦)
......
請訪問原文鏈接:https://sysin.org/blog/how-to-change-file-date/,查看最新版。
......
小技巧:在文件夾上添加 “PowerShell” 右鍵快捷訪問菜單
......
請訪問原文鏈接:https://sysin.org/blog/how-to-change-file-date/,查看最新版。
......
討論
討論:文件的時間屬性存儲在哪里?
-
如果存儲在文件本身之中,那么修改文件時間屬性,為什么 hash 不會變化?
-
如果存儲在當前系統的文件系統之中,那為什么文件經過傳輸,時間屬性卻沒有變化,或者有時候時間屬性都改變了?
-
壓縮包或者可以包含文件及目錄的載體如 iso 文件,時間屬性變更了,其中包含的文件時間屬性為什么可以保持不變?