2013-07-22 87 views
4

是否有一個特定的Unix/Linux命令顯示文件何時被重命名?我在Linux中有一個文件,想知道文件何時被重命名。我嘗試過ls -ltr,但只會顯示創建時的日期,而不會顯示上次修改時的日期。Linux/Unix命令檢查文件何時被重命名

是否有特定的Unix/Linux命令來做到這一點?

+0

這很容易演變成一個編程問題:「如何在Unix/Linux上編寫程序來告訴文件何時更改?是否有任何命令已經這樣做?」有一個子問題「命令是否便攜?」這是shell編程的重要信息,編程(包括shell編程)專門針對SO編寫。 –

回答

9

您可以使用

stat filename 

檢查Access當它是最後一次讀取。

更新時檢查Modify

檢查Change是否重命名。

加上其他像塊,索引節點等

+0

謝謝......這是完美的......正是我所需要的:) – user2579439

+2

更改時間報告inode更改。重命名不會更改inode。 –

+0

我指的是「更改」字段。重命名後,我從來沒有說過有關inode變化的任何信息 – bsd

1

當文件發生某些事情時,您可以使用Inotify庫進行通知。 它可能與腳本語言有綁定關係。

+0

謝謝我絕對可以做到這一點...但如果一個特定的文件已被重命名,並想知​​道它是什麼時候重命名然後,這就是我想知道的... – user2579439

+0

@ user2579439你無法知道過去改名。在T時刻你可以知道重命名。記錄它,或者現在處理它,但是你將無法知道過去的重命名。請參閱Jonathan回答獲取更多信息。 – Xaqq

6

的行爲要依賴於文件系統類型的文件信息。在傳統的Unix文件系統(特別是Mac OS X HFS文件系統)中,文件系統中文件重命名的有趣之處在於它根本不影響文件的inode;它隻影響文件從/移動到的目錄(或多個目錄)。因此,在單個文件系統中,更改重命名的唯一時間戳是保存該文件的目錄的修改時間。例如*

$ fl -a -c -m -n xxx.pl 
2013-07-17 16:17:17 2013-07-17 16:17:17 2013-07-17 16:17:17 xxx.pl 
$ mv xxx.pl yyy.pl 
$ fl -a -c -m -n yyy.pl 
2013-07-17 16:17:17 2013-07-17 16:17:17 2013-07-17 16:17:17 yyy.pl 
$ 

這意味着,在這樣的文件系統,你不能當這個文件被改名了一段時間的文件改名後告訴。

* fl是一個自制命令;該調用等同於Mac OS X stat調用stat -f '%Sa %Sm %Sc %N'。這隻與GNU/Linux stat命令略有關係。

另一方面,經驗證據顯示,Linux ext4文件系統確實記錄了名稱更改,同時更改了inode本身的修改時間。

$ stat -c '%x %y %z %n' test.dat 
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 test.dat 
$ mv test.dat test.data 
$ stat -c '%x %y %z %n' test.data 
2013-07-19 10:31:31.803842672 -0700 2013-07-19 10:31:31.803842672 -0700 2013-07-22 09:11:49.074339525 -0700 test.data 
$ 

所以,你能做什麼依賴於O/S在其上運行,並且文件系統類型的文件上。

如果您有inotify服務可用並且正在運行,您可以記錄文件重命名的事件,但是如果您不記錄該事件,則不知道文件何時被重命名。

目錄上的修改時間並不是特定文件更改時間的良好指示;只要任何文件被創建,移動,刪除,它都會更改。如果只有在目錄中的一個文件,然後更改時間可能表明該文件被創建或重命名時,但單個文件的目錄是例外,而不是規則。

0

在AIX上,您可以用等同「STAT」的 -

國家統計局的文件名

你應該能夠沿着知道文件的最後更新和修改,保存時間精確到秒與更多的信息。