回答:
通常、これには-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を参照してください。
圧縮されたTARアーカイブ(.tar.gz)を一度に更新することはできません。ただし、十分な空き領域がある場合は、これを実行できます。
.tar.gzファイルから.tarファイルを抽出します。
gunzip filename.tar.gz
次のコマンドで非圧縮の.tarファイルを更新しますtar -u
。
tar -uf filename.tar new_file
更新された.tarファイルを圧縮します。
gzip filename.tar
マルチコアCPUを使用している場合pigz
はgzip
、.gzファイルを抽出して作成する代わりに使用することをお勧めします。(pigz
はのマルチスレッド実装ですgzip
)
単純に置き換えるgzip
/ gunzip
コマンドにpigz
/ unpigz
。
ファイル内の特定のファイルを更新する場合*.tar.gz
は、次を実行します。
ファイルが利用可能なvi
場所から入力してくださいtar
/home>vi
たとえば、ディレクトリの下にあるsimple.tar.gzを変更する場合/home/test/
:
/home/test>vi
空のエディターでEnter
キーを:n simple.tar.gz
押しEnterて、フォルダーとファイルの一覧を取得し、変更する場所にカーソルを移動して、をクリックしますEnter。vi
特定のファイルのエディターが表示されます。次にi
、ファイルを変更するオプション。変更が成功した後。Escキーを押して:wq
、ファイルの書き込みと終了を選択します。次に、を使用:q
して、ファイルリストから抜けます。
これを繰り返し行う場合、最適化は次のようになります。
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