私の環境を展開可能にするために、時には便利なファイルとスクリプトを圧縮します。
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
内部方法はありますか?someFile
anotherName
答え1
pax
(tar
標準(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 と同じです。ed
sed
私はあなたのアプローチに疑問を抱きます。名前は同じですが、内容の異なるファイルを別のコンピュータに置くことは維持するのが難しいです。また、特定のファイルを非公開にする必要がある場合は、間違えやすいです。私の提案は、設定ファイルをサブディレクトリに保存し、シンボリックリンクを使用することです。たとえば、ifは.bashrc
非公開でサイト固有でなければならず、公開されなければならず、.profile
どこでも同じでなければなりません。
.bashrc -> etc/local/private/.bashrc
.profile -> etc/.profile
あなたのサイトに関連付けられた名前(または)をetc/local
持つディレクトリへのシンボリックリンクを作成し、あなただけがアクセスできることを確認すると、作業は完了です。ディレクトリ全体を展開してアーカイブを解凍した後(またはより良い方法は、次のようにシンボリックリンクを設定できます)~/etc/home
~/etc/work
~/etc/private
~/etc/*/private
~/etc
etc/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
。