我使用以下偽腳本建立已安裝軟體的 TAR
mkdir tmp
ln -s /path/to/app1/bin tmp/app1
ln -s /and/path/going/to/the-app-2 tmp/app2
tar -c --dereference -f apps.tar tmp
我需要--dereference
此處的選項來追蹤我剛剛在 中創建的連結tmp
。我首先建立連結的原因是在存檔中以與檔案系統上不同的名稱儲存目錄。
到目前為止,它運行良好。但是,我現在遇到的情況/path/to/app1
還包含鏈接,以及我不想關注的鏈接。
透過對命令進行一些更改可以實現這一點嗎tar
?或者我需要完全改變建立存檔的方式?
答案1
我認為沒有辦法只部分取消引用。你可以做類似的事情
tar -cf apps.tar /path/to/app1/bin /and/path/going/to/the-app-2
然後使用 -C 將它們提取到不同的根目錄
-C, --directory=目錄
change to directory DIR
例如
mkdir tmp
tar -C tmp -xf apps.tar
這將與您目前建立存檔的方式產生類似的效果。
您也可以使用 -C 指向任何現有目錄。
答案2
您真的需要 tarball 中的目錄結構與磁碟上的目錄結構不同嗎?
如果沒有,那麼你可以按原樣將它們打包:
tar -cf file.tar /path/1 /path/2
答案3
我可以複製而不是連結。不幸的是,這會增加一些額外的開銷(文件相當大)。當然,它最多會增長兩倍,因為焦油本身也是一種複製形式。
答案4
如果您是root
這樣,那麼最好的選擇是使用 mount 的綁定命令來基本上硬連結您想要壓縮的目錄,而不是符號連結到它們。那麼您就不需要使用取消引用選項。
mkdir tmp
mount --bind /path/to/app-1 tmp/app-1
mount --bind /path/to/app-2 tmp/app-2
tar cf apps.tar tmp
請務必在意外發生任何情況之前卸載這些目錄。看這些警告。