1

CMS システムのパッチが頻繁にリリースされます。最新バージョンのパッチが適用されたファイルを含む tar ファイルを、開発システムのフル バージョンに直接抽出できるようにしたいと考えています。tar ファイルを抽出すると、tar ファイルの名前のフォルダーに入れられます。そのため、各ファイルをメイン ディレクトリに手動でコピーする必要があります。tar に強制的にファイルを現在のディレクトリに抽出させ、同じファイル名を持つファイルを上書きさせる方法はありますか? すでに存在するディレクトリは上書きせずにマージする必要があります...

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

4

4 に答える 4

2

tar の --strip-components (または --strippath) 引数を確認してください。探しているものかもしれません。

EDIT : --keep-newer をミックスに投入すると、ローカルで変更されたファイルが上書きされなくなります。そして、開発サーバーで新しいリリースをテストしてから、rsync または subversion を使用して変更を引き継ぐことをお勧めします。

于 2009-03-17T23:27:34.887 に答える
1

--strip-components を機能させようとしましたが、それほど努力していませんでしたが、機能しませんでした。ディレクトリ構造をフラット化し続けました。検索中に、私がやりたいことを正確に行うように見える次のコマンドに出くわしました。

pax -r -f patch.tar -s'/patch///'

これは tar ではありませんが、動作します... 「パッチ」という単語を tar ファイル名に置き換えてください。

于 2009-03-18T16:37:01.057 に答える
0

オプション「--strip-components」を使用すると、埋め込まれたファイル名の一部を削除できます。それにより、やりたいことができるようになります。

詳細については、 http://www.gnu.org/software/tar/manual/html_section/transform.html をご覧ください。

于 2009-03-17T23:29:27.563 に答える
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 のみで機能します。しかし、私はそれを疑います。ユーザーが書き込み権限を持っている限り、すべてに対して機能するはずです。

于 2012-12-30T04:55:51.187 に答える