2009-03-17 10 views
1

パッチは私のCMSシステムで頻繁にリリースされます。私は開発システム上のフルバージョンを直接最新のバージョンのパッチファイルを含むtarファイルを抽出できるようにしたい。 tarファイルを抽出すると、tarファイルの名前のフォルダに格納されます。それで、私は各ファイルをメインディレクトリに手動でコピーする必要があります。 tarが現在のディレクトリにファイルを展開し、同じファイル名を持つファイルを上書きするように強制する方法はありますか?すでに存在するディレクトリは上書きしないでください。tarを使用して既存のWebアプリケーションにパッチを適用できますか?

これは可能ですか?もしそうなら、コマンドは何ですか?

答えて

2

あなたが探しているかもしれない--strip-components(または--strippath)引数をtarにチェックアウトしてください。

EDIT:ローカルで変更されたファイルを上書きしないように、--keep-newerを混ぜて使用することができます。そして私は開発サーバー上で新しいリリースをテストし、rsyncやsubversionを使って変更を引き継ぐことを提案します。

+0

信じられないほど - 私はこの機能をしばらく探していました。この機能は私のシステムのmanファイルには書かれていませんが、動作します。ありがとうございました! – jmohr

0

オプション '--strip-components'を使用すると、埋め込みファイル名の一部をトリミングできます。これで、あなたが望むことをすることができます。より多くのヘルプチェックアウトhttp://www.gnu.org/software/tar/manual/html_section/transform.html

+0

Cool。ディレクトリはマージされ、ファイルはパッチ状に上書きされますか? – user77413

+0

それ自体がマージされているものは何もありませんが、tarファイルにあるものは、現在ディスク上にあるものを上書きします(適切な権限を持っていると仮定します)。あなたのサイトのコピーを作って少し実験することが最善のことです。 –

1

については

私はハード、私はそれが働いて取得していないことをしようとしなかった間、私は、--strip-コンポーネントが動作するようになって試してみました。それはディレクトリ構造を平らにしていました。検索では、私は私がしたい正確に何やっているようだ次のコマンドに出会いました:

のpax -r -f patch.tar -s「/パッチ///」

それは、タールはありませんが、ちょっとそれは動作します...単語 "パッチ"をあなたのtarファイル名で置き換えてください。

+0

--strip-componentsのレベルを指定するのを忘れましたか?アーカイブがfoo/に解凍されている場合は、 "--strip-components 1"を使用します。 – snemarch

+0

はい、私は試しました - ストリップコンポーネント1と結果は私が期待したものではありませんでした。私が正しく覚えていれば、それはディレクトリ構造を1つの層だけ平らにし、その過程でファイル構造を乱した。私が言ったように、私は私のために働く他のアプローチを見つける前に、それを掘り下げませんでした。 – user77413

0

私はちょうど行っている:

tar -xzf patch.tar.gz 
をそして、それはパッチが含まれているすべてのファイルを上書きします。

つまり、パッチがappフォルダの内容用に作成されている場合は、そこに展開します。結果は次のようになります:アプリがどのように見える

tar.gz contains: oldfolder/someoldfile.txt, oldfolder/newfolder/newfile.txt 

前に:その後

app/oldfolder/someoldfile.txt 

、アプリが

app/oldfolder/someoldfile.txt 
oldfolder/newfolder/newfile.txt 

のように見え、 "someoldfile.txtは" 実際にあったものに更新されますtar.gz

これは通常のtarでは動作しないかもしれませんが、tar.gzのみです。しかし、私はそれを疑う。私は、ユーザーが書き込み権限を持っている限り、それがすべてのために動作するはずだと思います。

関連する問題