Como posso atualizar um arquivo tar.gz?

32

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?

xpanta
fonte
1
Veja também unix.stackexchange.com/questions/13093/…
anatoly techtonik

Respostas:

28

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

roadmr
fonte
2
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:

  1. Extraia o arquivo .tar do arquivo .tar.gz :

    gunzip filename.tar.gz

  2. Atualize o arquivo .tar descompactado com o tar -ucomando:

    tar -uf filename.tar new_file

  3. 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.

Manuais relacionados

andras.tim
fonte
5

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.

priyanka
fonte
1

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
Shubham Chaudhary
fonte