Symlink

如何檢查符號連結的時間戳?

  • August 7, 2019

當符號連結比原始文件舊時,有沒有辦法使用傳統命令更新符號連結?

我使用 Seafile 伺服器(類似於 Dropbox)將某些文件提供給我的學生。所以我共享了一個目錄並創建了指向這些文件的連結。Seafile 和 Dropbox 都不關心連結並將實際文件複製到伺服器。

問題是如果我更新實際文件,連結時間戳不會改變,新版本的文件也不會上傳到伺服器。

我嘗試了簡單的測試:

[ ./shared/the-symlink -ot ./actualfiles/pontedfile ] && touch -h ./shared/the-symlink

不幸的是,test取消引用連結並將文件的時間戳與自身進行比較,結果當然是錯誤的。

另請注意,符號連結必須比連結文件更新。我不需要將其設置為相同的時間戳。

有沒有辦法test檢查連結的時間戳而不是指向的文件?

我試圖避免的其他解決方案:

  • 複製文件而不是連結會起作用,但我不得不消耗太多的磁碟空間,因為文件通常很大;
  • touch使用所有符號連結也可以,但是所有文件都會一次又一次地複製到伺服器;(不是問題:見下面的編輯)

我願意一個比將時間戳轉換為字元串並自己比較它們更優雅的解決方案……

對我來說不是解決方案。

編輯

這不是問題的答案,但它是我的問題的解決方案:touch -h *更新所有符號連結時間戳。Seafile 辨識出這種變化並採取行動。幸運的是,它現在使用實際的文件時間戳重新檢查並僅上傳更改的文件。

編輯2

使用stat工作的解決方案:stat -c "%Y". 感謝史蒂夫

stat將給出符號連結本身的時間戳。

所以像下面這樣的方法會起作用

[[ $(stat -c '%Y' b) -lt $(stat -c '%Y' a) ]] && touch .......

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