Respostas:
Você normalmente usaria o sinalizador -u para isso. Na página do manual do tar:
-u, --update only append files newer than copy in archive
então essa sequência fará o que você precisa:
# 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
Para uma visão um pouco mais detalhada, consulte aqui: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html
Você não pode atualizar o arquivo TAR compactado ( .tar.gz ) em uma etapa. Mas, se você tiver espaço livre suficiente, poderá fazer o seguinte:
Extraia o arquivo .tar do arquivo .tar.gz :
gunzip filename.tar.gz
Atualize o arquivo .tar descompactado com o tar -u
comando:
tar -uf filename.tar new_file
Compacte o arquivo .tar atualizado :
gzip filename.tar
Se você possui CPU com vários núcleos, recomendo usar em pigz
vez de gzip
extrair e criar arquivos .gz . ( pigz
é uma implementação multiencadeada de gzip
)
Simplesmente substitua gzip
/ gunzip
comandos para pigz
/ unpigz
.
Se você deseja atualizar um arquivo específico no *.tar.gz
arquivo, faça o seguinte:
Digite vi
de onde o tar
arquivo está disponível
/home>vi
Por exemplo, se você deseja modificar simple.tar.gz, que está no /home/test/
diretório:
/home/test>vi
E no editor vazio, digite :n simple.tar.gz
e pressione, Enter
você obterá a lista de pastas e arquivos, mova o cursor para onde deseja modificar E clique Enter. Será mostrado o vi
editor do arquivo em particular. Então i
opção para alterar o arquivo. Após a mudança bem-sucedida. Pressione a Esctecla e escolha :wq
escrever e sair do arquivo. Em seguida, use :q
para sair da lista de arquivos.
Se você fizer isso repetidamente, uma otimização pode ser:
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