Filenames
tar 一個具有不同名稱的文件
為了使我的環境可部署,我偶爾會壓縮一些方便的文件和腳本:
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 一起工作,因為只有一個實現)。