Eu criei um arquivo tar.gz (usando a GUI, não a linha de comando). Como posso atualizá-lo com um comando de que novos arquivos são adicionados e arquivos modificados também são atualizados?
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
O OP estava perguntando sobre a atualização do arquivo compactado que não pode ser atualizado.
QkiZ 17/06
18
Solução / Solução alternativa
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 -ucomando:
tar -uf filename.tar new_file
Compacte o arquivo .tar atualizado :
gzip filename.tar
Acelerar
Se você possui CPU com vários núcleos, recomendo usar em pigzvez de gzipextrair e criar arquivos .gz . ( pigzé uma implementação multiencadeada de gzip)
Simplesmente substitua gzip/ gunzipcomandos para pigz/ unpigz.
Se você deseja atualizar um arquivo específico no *.tar.gzarquivo, faça o seguinte:
Digite vide onde o tararquivo 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.gze pressione, Enter
você obterá a lista de pastas e arquivos, mova o cursor para onde deseja modificar E clique Enter. Será mostrado o vieditor do arquivo em particular. Então iopção para alterar o arquivo. Após a mudança bem-sucedida. Pressione a Esctecla e escolha :wqescrever e sair do arquivo. Em seguida, use :qpara 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
Respostas:
Você normalmente usaria o sinalizador -u para isso. Na página do manual do tar:
então essa sequência fará o que você precisa:
Para uma visão um pouco mais detalhada, consulte aqui: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html
fonte
Solução / Solução alternativa
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
Acelerar
Se você possui CPU com vários núcleos, recomendo usar em
pigz
vez degzip
extrair e criar arquivos .gz . (pigz
é uma implementação multiencadeada degzip
)Simplesmente substitua
gzip
/gunzip
comandos parapigz
/unpigz
.Manuais relacionados
fonte
Se você deseja atualizar um arquivo específico no
*.tar.gz
arquivo, faça o seguinte:Digite
vi
de onde otar
arquivo está disponívelPor exemplo, se você deseja modificar simple.tar.gz, que está no
/home/test/
diretório: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 ovi
editor do arquivo em particular. Entãoi
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.fonte
Se você fizer isso repetidamente, uma otimização pode ser:
fonte