web-dev-qa-db-ja.com

tar.gzファイルを更新するにはどうすればよいですか?

Tar.gzファイルを作成しました(コマンドラインではなくGUIを使用)。新しいファイルが追加され、変更されたファイルも更新されるコマンドで更新するにはどうすればよいですか?

31
xpanta

通常、これには-uフラグを使用します。 tarのmanページから:

 -u, --update
       only append files newer than copy in archive

したがって、このシーケンスは必要なことを行います。

# First create the tar file. It has to be UNCOMPRESSED for -u to work
tar -cvf my.tar some-directory/
# ... update some files in some-directory
# ... add files in some-directory
# Now update only the changed and added files
tar -uvf my.tar some-directory/
# Compress if desired
gzip my.tar

もう少し詳細な外観については、こちらを参照してください: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html

27
roadmr

解決策/回避策

圧縮されたTARアーカイブ(。tar.gz)を一度に更新することはできません。ただし、十分な空き領域がある場合は、これを実行できます。

  1. 。tarファイルを。tar.gzファイルから抽出します:

    gunzip filename.tar.gz

  2. tar -uコマンドを使用して、非圧縮。tarファイルを更新します。

    tar -uf filename.tar new_file

  3. 更新された。tarファイルを圧縮します。

    gzip filename.tar

スピードアップ

マルチコアCPUを使用している場合、抽出および作成。gzファイルには、pigzの代わりにgzipを使用することをお勧めします。 (pigzgzipのマルチスレッド実装です)

gzip/gunzipコマンドをpigz/unpigzに置き換えるだけです。

関連マニュアル

17
andras.tim

*.tar.gzファイル内の特定のファイルを更新する場合は、次のようにします。

viファイルがある場所からtarを入力します

/home>vi

たとえば、/home/test/ディレクトリの下にあるsimple.tar.gzを変更する場合:

/home/test>vi

そして、空のエディターで:n simple.tar.gzを入力して押します Enter フォルダとファイルのリストを取得し、変更したい場所にカーソルを移動して、クリックします Enter。特定のファイルのviエディターが表示されます。次に、ファイルを変更するiオプション。変更が成功した後。押す Esc キーを押して:wqを選択し、ファイルを書き込んで終了します。次に、:qを使用して、ファイルリストから抜けます。

5
priyanka

これを繰り返し行う場合、最適化は次のようになります。

if [[ -f my.tar.gz ]]; then
    if [[ ! -f my.tar ]]; then
        echo 'No tar, unzipping tar.gz'
        gunzip my.tar.gz
    fi
    tar -uvf my.tar file1 file2 file_new
    gzip -fk my.tar  # This keeps a copy of the tar.
    # -f --force overwrite existing .tar.gz
    # -k --keep Keep the input file (.tar file)
else
    tar -cvzf my.tar.gz file1 file2
fi
1