Files
為什麼文本編輯器在未進行任何更改時將 mtime 設置為保存?
當我使用 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 應用程序至少應該觸摸文件以反映這一點。它可能是有價值的,如果,例如。您依靠時間戳來反映上次更新,即使此更新沒有任何意義。畢竟,如果您不想更改時間戳,則不必保存未更改的文件。