使用 ln 建立遺失的目錄

使用 ln 建立遺失的目錄

所以我正在編寫一個小型套件管理器,我遇到的一個問題是創建文件的符號連結。

它將包安裝到/usr/pkg/name-version,然後讀取檔案以確定要建立哪些符號連結。我用來ln建立鏈接,並且在嘗試安裝 Linux API 標頭時遇到了問題。我需要連結頭文件本身,而不是包含它們的資料夾(因此,如果 2 個包需要將文件放在 include 的同一子目錄中,則無需將其中一個包搞砸即可)。

我解決了這個問題,但ln如果路徑不完整,就會出錯,這很煩人,因為在安裝套件之前這些目錄不應該存在。

是否有一個標誌ln可以創建任何丟失的目錄,或者我必須使用一些複雜的 bash 腳本?

答案1

沒有標誌可以執行此操作ln。建立目錄不是它的工作。

mkdir -p foo/bar/qux將根據需要創建foofoo/bar和。foo/bar/qux因此,mkdir -p首先呼叫除最後一個路徑元件之外的所有路徑元件。

聽起來你像是在重新發明輪子 斯托,一個簡單的套件管理器,它透過建立所需深度的目錄來合併目錄層次結構,並使用指向內部不同套件的元件的符號連結。也許X斯托,這與 Stow 類似,但具有更多定制可能性。

答案2

您不需要複雜的 bash 腳本,而需要簡單的一行程式碼。mkdir --parents將處理所有事情,如果目錄結構已經存在,甚至不會列印錯誤。

只是在刪除時要小心如何處理這些目錄,這樣就不會破壞其他套件。

另外,既然你寫的是bash,你可以看看巫術(無恥的插頭)。也許修改它會更簡單,因為它成熟且靈活。

答案3

也許tar可以幫助準備帶有連結的文件:

find . -type l > links.txt
tar cpf links.tar --files-from links.txt

然後在需要的地方建立連結:

tar xvf links.tar

相關內容