Symlink

如何使連結具有與目標文件相同的時間戳

  • September 4, 2021

假設你有file一個給定的文件mtime。如果我創建一個通過符號連結sym指向的符號連結,它本身會得到一個與創建時間相對應的-stamp,這與of 不同。file``ln -s``mtime``symlink``mtime``file

那麼有沒有辦法創建一個符號連結,使其與mtime它指向的文件相同?

這個問題的背景是這個腳本,其中創建了一個指向雲鏡像的n個最新文件的連結目錄。現在,例如,如果我ls -lt在此current目錄中執行此操作,它不會顯示創建實際文件的日期,而是顯示創建符號連結的日期。但我想查看文件創建日期。

編輯 在我原來的文章中,我錯誤地要求 ctime(我在上面更改了它),但是問題應該是關於 mtime。感謝@ilkkachu 指出這一點。

你的意思是ctime還是mtime?Ctime 是文件元數據(inode 內容)文件內容的最新更改時間。它會在寫入時更新,但也會在權限發生更改時更新。mtime 是最近一次寫入文件數據的時間,可以用 改變touch,而 ctime 通常不能。

因為它可以為副本重置,所以 mtime 通常是更有用的一個。它也是ls -lt顯示的(您需要添加-c以顯示 ctime)。

您可以touch -h用來更改符號連結的 mtime:

$ ls -lt
total 4
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Sep  4 15:10 link.txt -> hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31  1999 hello.txt

$ touch -h -r hello.txt  link.txt 
$ ls -lt
total 4
-rw-r--r-- 1 ilkkachu ilkkachu 6 Dec 31  1999 hello.txt
lrwxrwxrwx 1 ilkkachu ilkkachu 9 Dec 31  1999 link.txt -> hello.txt

但這仍然需要手動完成,如果目標文件更改,它不會自動更新。但是您可以使用ls -L它來列印目標文件的詳細資訊,而不是連結本身:

$ touch hello.txt 
$ ls -L -lt
total 8
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep  4 15:12 hello.txt
-rw-r--r-- 1 ilkkachu ilkkachu 6 Sep  4 15:12 link.txt

當然,它也隱藏了它是一個連結開始的事實。

如果您需要混合輸出,並顯示連結名稱和目標以及指向文件的日期和所有權,您可能需要使用 Perl 之類的東西來創建該列表。

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