異なる名前のtarファイルを使用する

異なる名前のtarファイルを使用する

私の環境を展開可能にするために、時には便利なファイルとスクリプトを圧縮します。

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

ここに追加したいのですが、.bashrcその中に機密情報があるので、.bashrc-deployその情報を保持してから新しいサーバーにタールボールがある場合は、単に名前を変更できます。しかし、私はタールボールが.bashrc最初から正しい名前を持つことを望んでいるので、名前を変更する必要はありません。私は一時的にファイル名を変更し、次のようにタルボールを作成するスクリプトを書くことを検討しました。

#!/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内部方法はありますか?someFileanotherName

答え1

paxtar標準(POSIX)コマンドを使用してアーカイブを作成)を使用してオプションを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実装がこのように動作することを保証することはできません。実装は1つだけなので、bsdtarでも機能する必要があります。)

答え2

これを達成する1つの方法はチェーンローディングです。

存在する.bashrc

#!/bin/bash

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

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

次に、個人コンテンツ~/.bashrc-privateとその他のコンテンツをすべて入れます~/.bashrc~/.bashrc

答え3

GNU tarの使用(非埋め込みLinuxおよびCygwinの基本的なtarの実装):

tar czf env.tgz --transform 's/-deploy$//' .bashrc-deploy .profile …

これは残念ながら、BSD tarと同様に、多くの基本的なLinuxインストールには含まれていないpax(cpioとtarのPOSIXの代替)を使用しても可能です。

pax -w -x ustar '-s/-deploy$//' .bashrc-deploy .profile … | gzip >env.tgz
bsdtar -czf env.tgz '-s/-deploy$//' .bashrc-deploy .profile …

いずれの場合も構文はs/REGEX/REPLACEMENT/or と同じです。edsed


私はあなたのアプローチに疑問を抱きます。名前は同じですが、内容の異なるファイルを別のコンピュータに置くことは維持するのが難しいです。また、特定のファイルを非公開にする必要がある場合は、間違えやすいです。私の提案は、設定ファイルをサブディレクトリに保存し、シンボリックリンクを使用することです。たとえば、ifは.bashrc非公開でサイト固有でなければならず、公開されなければならず、.profileどこでも同じでなければなりません。

.bashrc -> etc/local/private/.bashrc
.profile -> etc/.profile

あなたのサイトに関連付けられた名前(または)をetc/local持つディレクトリへのシンボリックリンクを作成し、あなただけがアクセスできることを確認すると、作業は完了です。ディレクトリ全体を展開してアーカイブを解凍した後(またはより良い方法は、次のようにシンボリックリンクを設定できます)~/etc/home~/etc/work~/etc/private~/etc/*/private~/etcetc/localバージョン管理)。

同様のファイル.bashrc(主にサイトに拘束されることなく公開される可能性がある)の場合、ファイルを公開部分と非公開部分(必要に応じてサイト固有のファイルを含む)の2つの部分(または最大4つ)に分割します。主要部分はローカル部分を含む。

if [ -e ~/etc/private/.bashrc ]; then . ~/etc/private/.bashrc; fi
if [ -e ~/etc/local/.bashrc ]; then . ~/etc/local/.bashrc; fi
if [ -e ~/etc/local/private/.bashrc ]; then . ~/etc/local/private/.bashrc; fi

プログラミング言語で作成されたファイルでは、ホスト名、ドメイン名、または他のサイト固有の属性を動的にテストできるため、単一のファイルを保持できます。

case $HOSTNAME in
  darkstar) alias foo=some-local-command;;
esac

そこに機密内容があるというのがちょっと驚きです.bashrc。環境変数を定義する場合彼らは属しています~/.profile

関連情報