Comment mettre à jour un fichier tar.gz?


32

J'ai créé un fichier tar.gz (en utilisant l'interface graphique, pas la ligne de commande). Comment puis-je le mettre à jour avec une commande que de nouveaux fichiers sont ajoutés et que les fichiers modifiés sont également mis à jour?


Réponses:


28

Vous utiliseriez normalement le drapeau -u pour cela. Depuis la page de manuel de tar:

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

donc cette séquence fera ce dont vous avez besoin:

# 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

Pour un aperçu un peu plus détaillé, voir ici: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html


2
OP demandait la mise à jour d'une archive compressée qui ne peut pas être mise à jour.
QkiZ

18

Solution / Contournement

Vous ne pouvez pas mettre à jour l'archive TAR compressée ( .tar.gz ) en une seule étape. Mais, si vous avez suffisamment d'espace libre, vous pouvez le faire:

  1. Extrayez le fichier .tar du fichier .tar.gz :

    gunzip filename.tar.gz

  2. Mettre à jour le fichier .tar non compressé avec la tar -ucommande:

    tar -uf filename.tar new_file

  3. Compressez le fichier .tar mis à jour :

    gzip filename.tar

Accélérer

Si vous avez un processeur multicœur, je recommande d'utiliser pigzau lieu de gzippour extraire et créer des fichiers .gz . ( pigzest une implémentation multi-thread de gzip)

Remplacez simplement gzip/ gunzipcommandes par pigz/ unpigz.

Manuels connexes


5

Si vous souhaitez mettre à jour un fichier particulier dans un *.tar.gzfichier, procédez comme suit:

Entrez vid'où le tarfichier est disponible

/home>vi

Par exemple, si vous souhaitez modifier simple.tar.gz qui se trouve sous le /home/test/répertoire:

/home/test>vi

Et dans l'éditeur vide, entrez :n simple.tar.gzet appuyez sur, Enter vous obtiendrez la liste des dossiers et des fichiers, déplacez le curseur là où vous souhaitez modifier et cliquez Enter. Il montrera l' viéditeur du fichier particulier. Puis ioption pour changer le fichier. Après le changement réussi. Appuyez sur la Esctouche et choisissez :wqd'écrire et de quitter le fichier. Utilisez ensuite :qpour sortir de la liste des fichiers.


1

Si vous allez le faire à plusieurs reprises, une optimisation peut être:

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.