[Résolu] compression avec tar

je voudrai insérer des fichiers dans une archive tar…

voila ma commande

le pb… c’est qu’il me recrée une nouvelle archive pour chaque fichier, et que résultat, j’ai bien une archive toto mais avec le dernier fichier présenté par ls… n’y a t’il pas moyen d’insérer un fichier dans l’archive ?

merci :stuck_out_tongue:

bonsoir,
il y a une foultitude d’options décrites dans tar --help, parmis lesquelles:

[quote] -A, --catenate, --concatenate accoler les fichiers tar à l’archive
-r, --append accoler les fichiers à la fin de l’archive
-u, --update accoler seulement les nouveaux fichiers plutôt que de les copier dans l’archive[/quote]
m’étonnerait que tu trouves pas ton bonheur …

Pour y mettre les fichiers:

$ tar czf *.pdf

Pour rajouter des fichiers à une archive existante, il faut d’abord la décompresser…

merci, j’avais pas vu le -u

voila donc ce qu’il faut utiliser…

merci beaucoup

Rajoute un petit résolu dans ton titre :wink:

Bon à savoir …
j’ai deux ptites questions:

  • on peut faire de même en tar.bz2 ?
  • comment fonctionnent les’()’ de la ligne de commande ? (avec des mots, on traduirait comment cette ligne de commande ?).

au départ j’avais besoin d’une commande qui me permette de copier des dossiers dont le contenu était de plus de 20 000 fichiers :confused: afin d’éviter le “liste d’argument trop longue” qui m’a bien surpris hier soir:-o

j’ai donc trouvé sur internet comment on utilise des “pipe” et suis tombé sur la commande xargs

donc dans mon exemple

xargs récupère la sortie de ls *.pdf

-i{} dit que dans ma commande, lorsque je mettrai {} il faudra remplacer par la sortie de de la commande ls *.pdf
-t c’est le mode verbose
donc:

ls *.pdf | xargs -t -i{} tar -uvf toto.tar.gz {}

si pour ls ù.pdf j’ai toto1.pdf et toto2.pdf

j’aurrai 2 commandes executées

tar -uvf toto.tar.gz toto1.pdf
tar -uvf toto.tar.gz toto2.pdf

et en résultat un toto.tar.gz avec mes 2 pdf à l’interieur

Ca fait con d’utiliser ca pour 2 fichiers, mais dans le cas d’un méga dossier de 30778 fichiers d’un répertoire temporaire internet dont on veut garder que les images ? :slightly_smiling:
ls *.jpg | xargs -t -i{} tar -uvf archive.tar.gz {}

ok mercii :wink:
donc en fait, {} et la façon de dire que la commande prend en argument les résultats de la commande précédente …( parce que je m’étonnais qu’il n’y ai pas de pipe entre par exemple xargs et tar, … c’est bien ça …).

ben, de la meme facon que l’on utilise more, less ou grep, avec le caractère |
seulement xargs permet d’executer une commande en placant la sortie du resultat ou l’on veut…

ls -la | grep toto va affichier que les lignes ou se trouvent le mot “toto”

ls | xargs -t -i{} rm {} va supprimer tous les fichiers

on peut ecrire cette meme commande comme cela il me semble car par defaut xargs ajoute la sortie en fin de ligne
ls | xargs rm ce qui revient a taper ceci pour chaque fichier du repertoire courrant
rm nomdefichier

dans le cas d’une copie, le nom du fichier donné par ls n’est pas utilisé en fin de ligne pour cela, on dit a xargs de remplacer une chaine de caractere (les accolades, ca peut etre autre chose… c’est défini avec le -i) par la sortie de la commande avant le pipe…

donc ls | xargs -t -i{} cp {} /tmp/ revient a taper
cp nomdefichier /temp/ pour chaque fichier du repertoire courrant…

en fait xargs est vraiment un outil génial, utile pour les scripts surtout et les dossiers ayant trop de fichiers (quand les outils tels que cp mv chown chgrp indiquent “liste d’argument trop longue”)