是否有一個特定的Unix/Linux命令顯示文件何時被重命名?我在Linux中有一個文件,想知道文件何時被重命名。我嘗試過ls -ltr
,但只會顯示創建時的日期,而不會顯示上次修改時的日期。Linux/Unix命令檢查文件何時被重命名
是否有特定的Unix/Linux命令來做到這一點?
是否有一個特定的Unix/Linux命令顯示文件何時被重命名?我在Linux中有一個文件,想知道文件何時被重命名。我嘗試過ls -ltr
,但只會顯示創建時的日期,而不會顯示上次修改時的日期。Linux/Unix命令檢查文件何時被重命名
是否有特定的Unix/Linux命令來做到這一點?
您可以使用
stat filename
檢查Access
當它是最後一次讀取。
更新時檢查Modify
。
檢查Change
是否重命名。
加上其他像塊,索引節點等
謝謝......這是完美的......正是我所需要的:) – user2579439
更改時間報告inode更改。重命名不會更改inode。 –
我指的是「更改」字段。重命名後,我從來沒有說過有關inode變化的任何信息 – bsd
當文件發生某些事情時,您可以使用Inotify庫進行通知。 它可能與腳本語言有綁定關係。
謝謝我絕對可以做到這一點...但如果一個特定的文件已被重命名,並想知道它是什麼時候重命名然後,這就是我想知道的... – user2579439
@ user2579439你無法知道過去改名。在T時刻你可以知道重命名。記錄它,或者現在處理它,但是你將無法知道過去的重命名。請參閱Jonathan回答獲取更多信息。 – Xaqq
的行爲要依賴於文件系統類型的文件信息。在傳統的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服務可用並且正在運行,您可以記錄文件重命名的事件,但是如果您不記錄該事件,則不知道文件何時被重命名。
目錄上的修改時間並不是特定文件更改時間的良好指示;只要任何文件被創建,移動,刪除,它都會更改。如果只有在目錄中的一個文件,然後更改時間可能表明該文件被創建或重命名時,但單個文件的目錄是例外,而不是規則。
在AIX上,您可以用等同「STAT」的 -
國家統計局的文件名
你應該能夠沿着知道文件的最後更新和修改,保存時間精確到秒與更多的信息。
這很容易演變成一個編程問題:「如何在Unix/Linux上編寫程序來告訴文件何時更改?是否有任何命令已經這樣做?」有一個子問題「命令是否便攜?」這是shell編程的重要信息,編程(包括shell編程)專門針對SO編寫。 –