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?

xpanta
la source
1
Voir aussi unix.stackexchange.com/questions/13093/…
anatoly techtonik

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

roadmr
la source
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

andras.tim
la source
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.

priyanka
la source
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
Shubham Chaudhary
la source