Filenames

tar 一個具有不同名稱的文件

  • November 13, 2012

為了使我的環境可部署,我偶爾會壓縮一些方便的文件和腳本:

tar -czvf env.tgz .vimrc .vim/ bin/lsl bin/s

我想添加.bashrc到組合中,但我有一些敏感資訊,所以我維護.bashrc-deploy這些資訊,然後一旦 tarball 在新伺服器上,我可以簡單地重命名。但是,我真的希望從一開始就讓 tarball 具有正確的名稱.bashrc,這樣我就不必重命名了。我考慮編寫一個腳本來臨時重命名文件並製作 tarball,如下所示:

#!/bin/bash
mv .bashrc .bashrc-real
mv .bashrc-deploy .bashrc
tar -czvf env.tgz .bashrc .vimrc .vim/ bin/lsl bin/s
mv .bashrc .bashrc-deploy
mv .bashrc-real .bashrc

但是,是否tar有任何內部方式將someFile名稱儲存anotherName在 tarball 中?

你可以做到這一點的一種方法是鍊式負載。

.bashrc

#!/bin/bash

# ...
# Non-private information
# ...

[[ -r ~/.bashrc-private ]] && . ~/.bashrc-private

然後將(僅)您的私人物品~/.bashrc-private和其他所有內容放入~/.bashrc. 然後只需部署~/.bashrc.

使用(創建檔案pax的標準(POSIX)命令)並查看選項:tar``bsdtar``-s

pax -s '/\.bashrc-deploy/.bashrc/' -w -x ustar . | gzip > a.tar.gz

bsdtar -s '/\.bashrc-deploy/.bashrc/' -zcf a.tar.gz .

但是請注意,上面的內容會將.bashrc-deploy字元串替換.bashrc為要添加到存檔中的任何成員的任何文件路徑中的字元串。如果您只想替換./.bashrc-deploy目前目錄中的 ,則必須編寫它:

pax -s '|^\./\.bashrc-deploy$|./.bashrc|' -w -x ustar .

(儘管通過閱讀 POSIX pax 規範,我不確定它是否能保證每個 pax 實現都以這種方式工作。它應該與 bsdtar 一起工作,因為只有一個實現)。

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