題 在Linux中獲取文件的上次修改日期


我是Linux的新手。我正在使用命令行。我正在嘗試查看文件的上次修改日期。我如何從命令行在Linux中執行此操作?


107
2018-04-03 12:45


起源


ls -l 也有效...... - Daniel Beck♦
重複 superuser.com/questions/612099/... - Oldskool
@DanielBeck是日期 ls -l 修改日期或創建日期? - Bruno Bieri
@BrunoBieri這是修改日期。看到 man ls。典型的Linux文件系統甚至不跟踪創建日期 - 請參閱所接受的日期類型的答案。 - Daniel Beck♦


答案:


如@ edvinas.me所述, stat 告訴您有關該文件的各種信息,包括上次修改日期。

起初,我很困惑 修改 和 更改,只是為了澄清, stat 輸出列表:

  • 訪問 顯示上次數據訪問的時間(例如,讀取)。
  • 修改 顯示上次數據修改的時間。
  • 更改 顯示文件狀態上次更改的時間。

例如:

~ $ touch foo
~ $ stat foo
File: ‘foo’
Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: fc01h/64513d    Inode: 410397      Links: 1
Access: (0644/-rw-r--r--)  Uid: (80972/ etomort)   Gid: (18429/  eem_tw)
Access: 2015-09-21 12:06:11.343616258 +0200
Modify: 2015-09-21 12:06:11.343616258 +0200
Change: 2015-09-21 12:06:11.343616258 +0200
Birth: -

~ $ echo "Added bar to foo file" >> foo
~ $ stat foo
File: ‘foo’
Size: 42            Blocks: 8          IO Block: 4096   regular file
Device: fc01h/64513d    Inode: 410654      Links: 1
Access: (0644/-rw-r--r--)  Uid: (80972/ etomort)   Gid: (18429/  eem_tw)
Access: 2015-09-21 12:09:31.298712951 +0200
Modify: 2015-09-21 12:09:31.298712951 +0200
Change: 2015-09-21 12:09:31.302713093 +0200
Birth: -

~ $ chmod 444 foo
~ $ stat foo
File: ‘foo’
Size: 42            Blocks: 8          IO Block: 4096   regular file
Device: fc01h/64513d    Inode: 410654      Links: 1
Access: (0444/-r--r--r--)  Uid: (80972/ etomort)   Gid: (18429/  eem_tw)
Access: 2015-09-21 12:09:31.298712951 +0200
Modify: 2015-09-21 12:09:31.298712951 +0200
Change: 2015-09-21 12:10:16.040310543 +0200
Birth: -

90
2017-09-21 10:22





使用 stat 命令:

$ stat file

56
2018-04-03 12:47



如果您只想要上次修改日期(以人類可讀的形式),請使用 stat -c '%y' file - Adam Taylor


另一種更靈活的方式是使用 date -r。從 man date

-r, --reference=FILE
       display the last modification time of FILE

這樣做的好處是可以指定輸出格式,例如:

$ date -r foo
Thu Aug 31 10:36:28 AEST 2017
$ date -r foo -R
Thu, 31 Aug 2017 10:36:28 +1000
$ date -r foo -u
Thu Aug 31 00:36:28 UTC 2017
$ date -r foo +%s
1504139788

16
2017-08-31 01:04



是的,非常有幫助,謝謝。這是一個bash函數,它將重命名一個以修改時間作為前綴的文件:function mvfilestime(){if [x“$ {1}”=“x”];然後回顯“mvfilestime:文件缺少參數mv”否則f = $(日期+“%Y-%m-%d-%H-%M”-r $ {1}) - $ {1} echo mv $ {1} $ {f} mv $ {1} $ {f} fi} - Traveler


ls -l 應該做的工作。

例:

#> ls -l /home/TEST/
total 16

-rw-r--r--   1 rfmas1   nms          949 Nov 16 12:21 create_nd_lists.py

-rw-r--r--   1 rfmas1   nms            0 Nov 16 12:35 enb_list

-rw-r--r--   1 rfmas1   nms            0 Nov 16 12:35 nb_list

-rw-r--r--   1 rfmas1   nms            0 Nov 16 12:35 nodes_ip.txt

-rw-r--r--   1 rfmas1   nms            0 Nov 16 12:35 rnc_list

14
2017-11-16 05:43





如果文件在另一個網絡服務器上,我喜歡 httpie (文檔)。

安裝

pip install httpie --user

用法

-h 命令只給出標題。模式是

http -h [url] | grep 'Last-Modified\|Date'

例:

$ http -h https://martin-thoma.com/author/martin-thoma/ | grep 'Last-Modified\|Date'
Date: Fri, 06 Jan 2017 10:06:43 GMT
Last-Modified: Fri, 06 Jan 2017 07:42:34 GMT

Date 這很重要,因為它會報告服務器時間,而不是當地時間。此外,並非每個服務器都發送 Last-Modified (例如超級用戶似乎不這樣做)。


2
2018-01-06 10:08