Files

為什麼文本編輯器在未進行任何更改時將 mtime 設置為保存?

  • July 9, 2013

當我使用 sublime 並且我沒有進行任何更改時,編輯器中的圖示顯示文件未更改。

但是,如果我點擊保存它,它仍然會將文件系統的 mtime 時間設置為現在。

一個不變的保存真的應該更新“修改”時間嗎?


簡單的例子:

創建一個空文件

$ touch example.file
$ stat -l example.file 
-rw-r--r-- 1 matthew staff 0 Jul  9 14:45:41 2013 example.file

觸摸它會更新 mtime

$ touch example.file
$ stat -l example.file
-rw-r--r-- 1 matthew staff 0 Jul  9 14:45:57 2013 example.file

編輯它,但不做任何更改,也會更新 mtime

$ vim example.file
# :wq # write and quit, making no changes
$ stat -l example.file
-rw-r--r-- 1 matthew staff 0 Jul  9 14:46:10 2013 example.file

一個不變的保存真的應該更新“修改”時間嗎?

是的,因為當應用程序寫出文件時,作業系統會將該數據寫入磁碟。它可能與文件中已有的數據完全相同,但作業系統不會檢查或關心這是否屬實。當然,希望文本編輯器不要天真到每次保存都寫一個完整的文件,因為我保存非常頻繁並且不希望無意義地磨損磁碟(也許作業系統的文件記憶體和同步可以改善這一點,因此應用程序不會不得不擔心)。

許多應用程序(包括 vim)會注意到它們載入的文件是否在外部發生更改,並通知使用者。我會假設他們是根據 mtime 執行此操作的,但是快速檢查一下touch證明至少在 vim 的情況下,它並不是那麼簡單(乞求 vim 如何知道已進行更改的問題 - 也許如果 mtime 已更改,則比較兩個版本的雜湊?)。我的觀點是,如果應用程序正在監視文件的外部更改,那麼它應該能夠安全地保存更改而無需重寫整個文件(再次:希望如此)。在這種情況下,您會認為保存未更改的文件可能意味著什麼也不做。但是,由於使用者確實要求保存(即使使用者知道或可以知道是否有必要),那麼 IMO 應用程序至少應該觸摸文件以反映這一點。它可能是有價值的,如果,例如。您依靠時間戳來反映上次更新,即使此更新沒有任何意義。

畢竟,如果您不想更改時間戳,則不必保存未更改的文件。

引用自:https://unix.stackexchange.com/questions/82345