首頁 > 軟體

Linux touch命令詳述

2020-06-16 16:35:39

touch命令

touch命令有兩個功能:一是用於把已存在檔案的時間標籤更新為系統當前的時間(預設方式),它們的資料將原封不動地保留下來;二是用來建立新的空檔案。

 語法

touch(選項)(引數)

最常用用法:touch fileA
- 如果fileA存在,使用touch指令可更改這個檔案或目錄的日期時間,包括存取時間和更改時間;
- 如果fileA不存在,touch指令會在當前目錄下新建一個空白檔案fileA。

 引數
引數解釋
-a  只更改存取時間。
-c  不建立任何文件。
-d 使用指定的日期時間,而非現在的時間。 [[CC]YY]MMDD text
-f 此引數將忽略不予處理,僅負責解決BSD版本touch指令的相容性問題。
-m  只更改變動時間。
-r 把指定文件或目錄的日期時間,統統設成和參考文件或目錄的日期時間相同。
-t 使用指定的日期時間,而非現在的時間[CC[YY]MMDDhhmm[.SS] 
--help 線上幫助
--version 顯示版本資訊。
 使用範例:
 範例一:建立不存在的檔案

touch test1.txt test2.txt

[root@Linuxidc tmp]# touch test1.txt test2.txt
[root@Linuxidc tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 30 14:54 test1.txt
-rw-r--r-- 1 root root 0 Nov 30 14:54 test2.txt
 範例二:如果test3不存在,則不建立檔案

touch -c test3.txt

[root@Linuxidc tmp]# touch -c test3.txt
[root@Linuxidc tmp]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 30 14:54 test1.txt
-rw-r--r-- 1 root root 0 Nov 30 14:54 test2.txt
 範例三:更新test1.txt的時間和test2.txt時間戳相同

touch touch test1.txt test3.txt

[root@Linuxidc tmp]# ll test1.txt test3.txt
-rw-r--r-- 1 root root 0 Nov 30 14:54 test1.txt
-rw-r--r-- 1 root root 0 Nov 30 14:58 test3.txt
[root@Linuxidc tmp]# touch test1.txt test3.txt
[root@Linuxidc tmp]# ll test1.txt test3.txt
-rw-r--r-- 1 root root 0 Nov 30 14:58 test1.txt
-rw-r--r-- 1 root root 0 Nov 30 14:58 test3.txt
[root@Linuxidc tmp]#
 範例四:設定檔案的時間戳

touch -t 201808080808 test1.txt

[root@Linuxidc tmp]# ll test1.txt
-rw-r--r-- 1 root root 0 Nov 30 14:58 test1.txt
[root@Linuxidc tmp]# touch -t 201808080808 test1.txt

[root@Linuxidc tmp]# stat test1.txt
  File: 'test1.txt'
  Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d    Inode: 11041       Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-08-08 08:08:00.000000000 +0800
Modify: 2018-08-08 08:08:00.000000000 +0800
Change: 2019-05-30 15:01:03.959402702 +0800
 Birth: -
 範例五:將後面的時間改成前面的時間,將test2.txt的時間改為test1.txt的時間。

touch -r test1.txt test2.txt 

[root@Linuxidc tmp]# ll
總用量 0
-rw-r--r-- 1 root root 0 8月   8 2018 test1.txt
-rw-r--r-- 1 root root 0 11月 30 14:54 test2.txt
-rw-r--r-- 1 root root 0 11月 30 14:58 test3.txt
[root@Linuxidc tmp]# touch -r test1.txt test2.txt
[root@Linuxidc tmp]# ll
總用量 0
-rw-r--r-- 1 root root 0 8月   8 2018 test1.txt
-rw-r--r-- 1 root root 0 8月   8 2018 test2.txt
-rw-r--r-- 1 root root 0 11月 30 14:58 test3.txt
 範例六:把所以的.txt檔案修改到2013年10月13日的時間。操作命令:

touch -d "10/13/2013" *.txt

[root@Linuxidc tmp]# touch -d 20161013 *.txt
[root@Linuxidc tmp]# ll
總用量 0
-rw-r--r-- 1 root root 0 10月 13 00:00 test1.txt
-rw-r--r-- 1 root root 0 10月 13 00:00 test2.txt
-rw-r--r-- 1 root root 0 10月 13 00:00 test3.txt

另外也可以單獨修改時間或者月份,如下:
以使用 am, pm 或是 24 小時的格式,日期可以使用其他格式如 6 May 2000 。
- touch -d "6:03pm" file
- touch -d "05/06/2000" file
- touch -d "6:03pm 05/06/2000" file


 範例七: 不帶任何選項下執行 touch

最簡單的使用 touch 命令。只需鍵入:$ touch file_name
請觀察下面的一張截圖。

[root@Linuxidc tmp]# ll
總用量 0
-rw-r--r-- 1 root root 0 10月 13 00:00 test1.txt
[root@Linuxidc tmp]# touch test1.txt
[root@Linuxidc tmp]# ll
總用量 0
-rw-r--r-- 1 root root 0 11月 30 15:23 test1.txt

test1.txt原來的時間戳是 00:00在我們使用 touch 命令後,它改變為了 15:23。由此看出,預設情況下,touch 會將檔案的時間戳改為當前時間。

 範例八:只改變存取時間

正如我們之前提到的,每個檔案都附有存取時間和修改時間。上面的時間戳是 15:23。我們可以看更多的細節。

[root@Linuxidc tmp]# stat test1.txt
  檔案:"test1.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11041       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2019-05-30 15:23:27.216913900 +0800
最近更改:2019-05-30 15:23:27.216913900 +0800
最近改動:2019-05-30 15:23:27.216913900 +0800
建立時間:-

我們發現存取時間和修改時間的值是相同的都是 15:23:27 ,還有它們屬於同一時區 GMT +8。
如果現在我們要只改變存取時間,我們需要使用-a選項。
touch -a test1.txt

[root@Linuxidc tmp]# touch -a test1.txt
[root@Linuxidc tmp]# stat test1.txt
  檔案:"test1.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11041       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2019-05-30 15:28:35.938248963 +0800
最近更改:2019-05-30 15:26:16.850686494 +0800
最近改動:2019-05-30 15:28:35.938248963 +0800
建立時間:-

如你所見,存取時間變為了 15:28:35 ,但是修改時間仍為15:26:16

 範例九:只改變修改時間

使用-m選項來實現
touch -m test1.txt

[root@Linuxidc tmp]# touch -m test1.txt
[root@Linuxidc tmp]# stat test1.txt
  檔案:"test1.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11041       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2019-05-30 15:28:35.938248963 +0800
最近更改:2019-05-30 15:31:41.033247158 +0800
最近改動:2019-05-30 15:31:41.033247158 +0800
建立時間:-

現在修改時間改為了 15:31:41。請注意,當檔案被存取或修改時,狀態改變時間域的值總會對其記錄。

 範例十:更改為自定義時間戳

-a-m選項都會將檔案的時間戳改為現在當前時間,也可以更改為自定義時間戳。使用-t選項實現。
從上面範例範例中的 test1.txt,我們看出它的時間戳是:
- 最近存取:2019-05-30 15:28:35
- 最近更改:2019-05-30 15:31:41
- 最近改動:2019-05-30 15:31:41

假如我們想要將存取時間和修改時間改為2017年1月12日 09:58:27。我們可以用下列命令來完成:
 touch -t 201701120958.27 test1.txt

[root@Linuxidc tmp]# touch -t 201701120958 test1.txt
[root@Linuxidc tmp]# stat test1.txt
  檔案:"test1.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11041       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2017-01-12 09:58:00.000000000 +0800
最近更改:2017-01-12 09:58:00.000000000 +0800
最近改動:2019-05-30 15:36:43.837822257 +0800
建立時間:-

-t 選項語法組成 :

[[CC]YY]MMDDhhmm [.SS]

CC - 年份的前兩位 YY - 年份的後兩位
MM - 月份 [01-12] DD - 日期 [01-31]
hh - 時 [00-23] mm - 分 [00-59]
SS - 秒 [00-61]  

這裡,CC為年數中的前兩位,即”世紀數”;YY為年數的後兩位,即某世紀中的年數.如果不給出CC的值,則touch 將把年數CCYY限定在1969--2068之內.MM為月數,DD為天將把年數CCYY限定在1969--2068之內.MM為月數,DD為天數,hh為小時數(幾點),mm為分鐘數,SS為秒數.此處秒的設定範圍是0--61,這樣可以處理閏秒.這些數位組成的時間是環境變數TZ指定的時區中的一個時間.由於系統的限制,早於1970年1月1日的時間是錯誤的.

 範例十一:改變日期和時間的另一種方式

如果你覺得[[CC]YY]MMDDhhmm [.SS]格式不適合你,我們也可以使用 -d 選項。下面是-d選項使用的一個範例。
舉例來說,我們有個名為 test3.txt 的檔案,它的相關屬性在下面的截圖中展示了。

[root@Linuxidc tmp]# stat test3.txt 
  檔案:"test3.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11044       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2016-10-13 00:00:00.000000000 +0800
最近更改:2016-10-13 00:00:00.000000000 +0800
最近改動:2019-05-30 15:11:35.285472753 +0800
建立時間:-

現在我們要將日期2017年1月14日改為2013年12月20日。可以使用下列命令:
$ touch -d '10-December-2013' test3.txt

[root@Linuxidc tmp]#  touch -d '10-December-2013' test3.txt
[root@Linuxidc tmp]# stat test3.txt 
  檔案:"test3.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11044       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2013-12-10 00:00:00.000000000 +0800
最近更改:2013-12-10 00:00:00.000000000 +0800
最近改動:2019-05-30 16:22:21.647100822 +0800
建立時間:-

不出意料,存取時間和修改時間的日期已經改為了2013年12月10日。

 範例十二:改變時區

如果我們想改變指定GMT的時間,我們也可以使用-d選項。
touch file_3.txt

[root@Linuxidc tmp]# touch test3.txt 
[root@Linuxidc tmp]# stat test3.txt 
  檔案:"test3.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11044       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2019-05-30 16:23:50.453099824 +0800
最近更改:2019-05-30 16:23:50.453099824 +0800
最近改動:2019-05-30 16:23:50.453099824 +0800
建立時間:-

不難發現 test3.txt 的時區為 GMT +0800。要改為 GMT3 時區,我們只需要鍵入如下命令:
touch -d GMT3 test3.txt

[root@Linuxidc tmp]# touch -d GMT3 test3.txt
[root@Linuxidc tmp]# stat test3.txt 
  檔案:"test3.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11044       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2019-05-30 11:00:00.000000000 +0800
最近更改:2019-05-30 11:00:00.000000000 +0800
最近改動:2019-05-30 16:25:25.496878027 +0800
建立時間:-

好的,現在時間已經改為了 11:00:00 AM。

 範例十三:結合引數下使用-d選項

還可以用很酷的方式使用-d選項。請觀察下面的圖片。

[root@Linuxidc tmp]# touch -d 'next tuesday GMT3' test3.txt 
[root@Linuxidc tmp]# stat test3.txt 
  檔案:"test3.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11044       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2019-04-06 11:00:00.000000000 +0800
最近更改:2019-04-06 11:00:00.000000000 +0800
最近改動:2019-05-30 16:28:55.210247929 +0800
建立時間:-

我們可以將單詞 next Sunday 和 GMT 3合成一個值,而 touch 命令仍然能識別它。

還有另一個-d選項的範例。 首先,我們要將file3_3.txt重置到當前日期和時間。
touch file_3.txt

[root@Linuxidc tmp]# touch test3.txt 
[root@Linuxidc tmp]# stat test3.txt 
  檔案:"test3.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11044       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2019-05-30 16:30:36.173246795 +0800
最近更改:2019-05-30 16:30:36.173246795 +0800
最近改動:2019-05-30 16:30:36.173246795 +0800
建立時間:-

然後我們嘗試這個命令:
touch -d '1 year ago 13:43:07' test3.txt

[root@Linuxidc tmp]# touch -d '1 year ago 13:43:07' test3.txt
[root@Linuxidc tmp]# stat test3.txt 
  檔案:"test3.txt"
  大小:0             塊:0          IO 塊:4096   普通空檔案
裝置:803h/2051d    Inode:11044       硬連結:1
許可權:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近存取:2018-11-30 13:43:07.000000000 +0800
最近更改:2018-11-30 13:43:07.000000000 +0800
最近改動:2019-05-30 16:31:30.369246185 +0800
建立時間:-

太震撼了,Touch 甚至能識別單詞‘1 year ago’。

 範例十四:建立一個空檔案

當你執行 touch 命令目標檔案不存在時,touch 會建立一個同名的空檔案。
touch test4.txt

[root@Linuxidc tmp]# touch test4.txt
[root@Linuxidc tmp]# ll test4.txt
-rw-r--r-- 1 root root 0 11月 30 16:34 test4.txt
 範例十五: 同時建立多個檔案

你可以用空格將目標檔案分割開來,以此來建立多個檔案。
touch doc_10.txt doc_20.txt doc_30.txt

[root@Linuxidc tmp]# touch doc_10.txt doc_20.txt doc_30.txt
[root@Linuxidc tmp]# ll doc*
-rw-r--r-- 1 root root 0 11月 30 16:35 doc_10.txt
-rw-r--r-- 1 root root 0 11月 30 16:35 doc_20.txt
-rw-r--r-- 1 root root 0 11月 30 16:35 doc_30.txt

IT145.com E-mail:sddin#qq.com