Tar 解引用僅 1 級

Tar 解引用僅 1 級

我使用以下偽腳本建立已安裝軟體的 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

請務必在意外發生任何情況之前卸載這些目錄。看這些警告

相關內容