首先,我知道您無法建立資料夾的硬連結。
我想知道是否有任何命令(linux)可以自動(並遞歸地)在目的地建立後續資料夾樹,然後自動將所有檔案從來源硬連結到目的地。
答案1
我不確定“然後自動將所有文件從來源硬連結到目標”是什麼意思。而且你明確地想要遞迴。
如果您希望這兩個位置保持“同步”,因此應同時在兩個位置中觀察到刪除或建立文件,然後綁定安裝(這個另一個答案) 很好。請注意,該解決方案不會在檔案系統中留下任何痕跡。如果您建立硬鏈接,則會在檔案系統中建立它。移動磁碟並將檔案系統掛載到另一個作業系統中,硬連結仍然存在。重新啟動,硬連結仍然存在。綁定安裝位於作業系統層級。在移動和掛載磁碟後,您不僅需要單獨命令其他作業系統進行綁定掛載。如果不移動磁碟,仍然需要告訴目前OS進行bind mount再次重新啟動後(如果您想要永久解決方案)。
目錄的符號連結有點類似,它存在於檔案系統中。
ln -s /original /other
如果符號連結及其目標屬於同一檔案系統且符號連結是相對的,那麼即使檔案系統安裝在其他地方(不同的安裝點,可能在不同的作業系統中),它也會運作。有一些原因導致符號連結可能不是您想要的(例子)。
注意綁定安裝或符號連結並不是真正的遞歸。它是單身的「連結」兩條路徑的行為。它對更深的路徑沒有任何作用。它們的(半)等價性是因為各自的((((…)great-)great-)grand)父「目錄」之間存在某種聯繫。
現在,如果“然後自動將所有檔案從來源硬連結到目標”的意思是“自動執行此操作一次”,那麼您可以使用以下命令來執行此操作cp
:
cp -lR /original /other
(-l
儘管 POSIX 並不要求)。它就像cp -R
但帶有硬鏈接。這確實是遞歸的。但這也是一次性的行動。目錄子樹是獨立的,只有常規檔案出現硬連結。檔案建立或刪除不會被鏡像。破壞硬連結的操作會破壞硬連結。
答案2
會一個綁定掛載是一個更好的解決方案嗎?它完全符合您的要求,即讓兩個不同路徑上的所有檔案遞歸地相同。
此命令使/other
內容與現有掛載或目錄相同/original
:
mount --bind /original /other
/original
您在其中一個或中所做的任何變更都會/other
立即顯示在另一個中,因為這兩個路徑現在指向同一安裝點。