touch 不僅能建立空檔,更是精準控制檔案 存取時間 (atime)、修改時間 (mtime)、狀態變更時間 (ctime) 的核心工具。本文系統化說明所有參數、時間格式、實戰範例與腳本應用場景。

touch [OPTION]... FILE...
| 參數 | 長選項 | 功能 |
|---|---|---|
-a |
--time=atime |
僅修改 **存取時間** (atime) |
-m |
--time=mtime |
僅修改 **修改時間** (mtime) |
-c |
--no-create |
檔案不存在時**不建立**新檔 |
-r |
--reference=FILE |
參考指定檔案的時間戳 (以該檔 atime/mtime 為準) |
-d |
--date=STRING |
解析字串時間 (支援 "2 days ago", "2024-01-15 10:30", "next Friday" 等) |
-t |
指定時間格式 [[CC]YY]MMDDhhmm[.ss] (無分隔符) |
|
--time={atime|access|use|mtime|modify} |
明確指定修改哪種時間 | |
-h, --no-dereference |
影響符號連結本身而非目標檔 |
touch log2012.log log2013.log
# 不存在則建立,存在則更新時間
touch -c log2014.log
# log2014.log 不存在時不建立,不報錯
touch -r reference.log target.log
# target.log 的 atime/mtime 變為 reference.log 相同
touch -t 202401151030.45 target.log
# 2024-01-15 10:30:45
touch -d "2 days ago" target.log
touch -d "2024-12-25 00:00" target.log
touch -d "next Monday" target.log
touch -a -d "1 hour ago" target.log # 僅 atime
touch -m -d "yesterday" target.log # 僅 mtime
backup_file="config_$(date +%Y%m%d_%H%M%S).bak"
touch -t $(date -d "1 hour ago" +%Y%m%d%H%M.%S) "$backup_file"
# 檔案時間設為 1 小時前,配合 find -mmin +60 清理
# 將 /src 所有檔案時間同步到 /dst 對應檔案
cd /src
find . -type f -exec touch -r {} /dst/{} \;
touch test.ts
stat test.ts
# 觀察 Access/Modify/Change 精度 (ext4 通常 ns 級,FAT32 2 秒)
ctime (inode 狀態變更時間) **無法用 touch 修改**,僅在 chmod/chown/重命名/內容變更時由核心自動更新-t 格式**不支援分隔符**,易寫錯 (如 2024-01-15 錯誤,正確 202401150000)-h 修改連結本身熟練掌握 touch 的時間控制能力,能在備份腳本、測試資料準備、時間敏感應用除錯等場景大幅提升自動化程度。