touch – 修改檔案時間戳記及建立新檔


touch 指令可以建立空白的新檔案, 改變現有檔案及目錄的戳記, 以下是 touch 指令的用法。
linux-touch-command

在介紹 touch 指令的用法前, 首先講一下 Linux 的檔案的 3 種時間戳記:

atime (access time) -> 檔案最後被開啟、讀取或存取的時間。
mtime (modify time) -> 檔案最後被修改的時間。
ctime (change time) -> 檔案的屬性最後被修改的時間, 包括權限及 owner.

要檢視檔案詳細資訊, 可以用 stat 指令, 它會顯示包括時間戳記的檔案詳細資訊:

$ stat test.sh

現在開始介紹 touch 指令, touch 指令後面只有檔案名稱, 而沒有任何參數, 當檔案不存在時, 會自動建立空白的新檔, 這也是在 Linux 常用建立空間新檔案的方法, 例如:

$ touch file1

如果想建立多個空白新檔案, 只要加上多個檔案名即可:

$ touch file1 file2 file3

如果不想 touch 指令建立新檔案, 只要加上 -c (–no-create) 參數:

$ touch -c file1

用 touch 修改檔案時間戳記, 預設沒有加入參數的情況下, 會將 atime 及 mtime 同時修改成現在的時間。如果需要指定要修改的時間戳記, 便要參數設定。

使用 -a 參數設定檔案的 atime (access time) 成現在的時間:

$ touch -a file1

使用 -m 參數設定檔案的 mtime (modify time) 成現在的時間:

$ touch -m file1

上面的例子是是檔案的 atime 及 mtime, 修改成現在的時間, 如果要修改成指定的時間, 便要加上 -d (–date=) 參數, 例如修改檔案的 atime:

$ touch -d ‘6 June 2018 20:30’ file1

Copy

上面指令會將檔案 file1 的 atime 改成 2018 年 6 月 6 日 20:30 分, 而時間的部份需要用引號包著。

但如果放在 Shell Script 內執行, 上面的日期格式反而很麻煩, 改用 -t 參數, 並以下面格式設定:

use [[CC]YY]MMDDhhmm[.ss]

跟上面的例子一樣, 改用數字代表時間:

$ touch -t 1806062030 file1

除了自訂時間外, 也可以將其他檔案的時間戳記複製, 例如要將 file1 的時間戳記複製到 file2, 用以下指令:

$ touch -r file1 file2

除了檔案外, touch 也可以對目錄及 symlink 生效, 如果目標檔案是 symlink, 預設的情況 touch 會修改 symlink 指向的檔案的時間戳記, 如果要修改 symlink 的時間戳記, 需要加上 -h 參數:

$ touch -h symlink1

Leave a Reply