Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

#1 15 Dec 2006 12:56:40

bros
Affranchi(e)
 
Date d'inscription: 15 Dec 2006
Messages: 5

Tar archiveur, limitation en sortie

Salut les gars,

Voici un petit couac sur lequel je butte, après avoir fouiller les listes de discussions, les cours et tutoriels et tester des combinaisons de xargs et autres awk .

Voici le contexte :
find /RepertoireRacine/ -type f -mmin -$NbrsDeMinutesAnterieures | xargs tar cvf - {} | gzip > fichierDumpDesFichiersRecents.tar.gz

les sorties recrachés par xargs sont des chemins absolus de fichiers du type :
/RepertoireRacine/RepertoireSuite2/monfichierRecent.txt
/RepertoireRacine/RepertoireSuite2/monfichierRecent2.txt
/RepertoireRacine/RepertoireSuite2/monfichierRecent2.txt

ce sur quoi je me retrouves donc avec une archive contenant les fichiers récéments modifiés ainsi que leurs répertoires respectifs, donc une arborescence comme :

/RepertoireRacine/RepertoireSuite2 (quelque fichiers récents Ici par exemple)/RepertoireSuite3 (encore des fichiers)/RepertoireSuite4 etc...

ce qui est bien vu qu'on a pas tout en vrac sous un repertoire because on conserve l'arbo, sauf que je souhaiterais qu'il ne crée ces répertoires qu'à partir du niveau que je lui donne, exemple :

/RepertoireSuite3 (quelques fichiers)/RepertoireSuite4(quelques fichiers)/

donc sans /RepertoireRacine/RepertoireSuite2...

Voila voiloû, merci d'avance de vos dépannages et sans qu'il n'y ait besoin de modifier le contexte de commande si possible...

Hors ligne

 

#2 15 Dec 2006 13:34:26

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Tar archiveur, limitation en sortie

Hello,

  Par défaut find produit des chemins relatifs à son répertoire courant, tu peux donc faire comme cela:

Code:

cd /repertoireRacine/ ; find . -type f -mmin $minutes | tar cvzf /destination/fichiers-recents.tar.gz -T -

Ou, si le chemin absolu pour le fichier de destination de tar te dérange,

Code:

(cd /repertoireRacine/ ; find . -type f -mmin $minutes) | tar cvzf fichiers-recents.tar.gz -T - -C /repertoireRacine

Ici, les parenthèses provoquent l'utilisation d'un sous-shell, ce qui rend local le changement de répertoire. L'option -C de tar indique le répertoire de base à utiliser pour les fichiers à archiver/désarchiver.

note l'usage de l'option -z de tar pour opérer directement sur un .tar.gz.

Très important: note l'usage de l'option "-T -" pour que tar prenne sur son entrée standard la liste des fichiers. Passer par xargs est dangereux, parce que l'espace alloué pour passer les arguments est limité. Si le nombre de fichiers est important, tout ne tiendra pas sur une seule commande, et xargs va invoquer tar plusieurs fois de suite, ce qui aura pour conséquence d'écraser ton archive a chaque fois, et il te manquera une partie conséquente de ton backup. L'option -T de tar permet de contourner le problème.

Hors ligne

 

#3 15 Dec 2006 13:46:24

bros
Affranchi(e)
 
Date d'inscription: 15 Dec 2006
Messages: 5

Re: Tar archiveur, limitation en sortie

Comme je n'ai pas été sur d'être sufisament clair je re-précise ici :
Ma solution se définirai ainsi :
-> Pouvoir obtenir dans l'archive de sortie tous les répertoires et sous répértoires inférieurs mais en ayant le pouvoir d'amputé la partie supérieure (en sortie, et non en amont de la commande donnée plus haut) du nombre de répertoires que je souhaites.

Dans l'exemple :
/ (répertoire racine)
/rep1
/rep1/sous-rep11
/rep1/soup-rep12
/rep1/soup-rep13
/rep2

Je lance ma commande pour qu'il identifie les fichiers récements modifiés dans /rep1/ pour qu'il cherche donc aussi dans "sous-rep11, sous-rep12 et sous-rep13".
Ainsi dans l'archive de sortie crée par tar il va me reconstituer physiquement cette arborescence sur le disque dur avec :

/rep1
/rep1/sous-rep11/(fichiers)
/rep1/soup-rep12/(fichiers)
/rep1/soup-rep13/(fichiers)

MAIS je ne souhaites pas qu'il me crée physiquement le répertoire "/rep1" car je ne veux avoir dans mon archive que :
/soup-rep11/(fichiers)
/soup-rep12/(fichiers)
/soup-rep13/(fichiers)

Si j'obtiens cela, c'est j'ai donc que j'ai pû "amputé" la création de l'archive d'1 répertoire supérieur et j'ai réussi....

C'est que je veux ça sachant que pour que TAR puisse archiver chaque fichier il lui faut absolument le chemin absolu de chacun de ces fichiers, ce qui tombe bien vu que c'est ce que Find lui donne à manger, des chemins de fichiers absolus comme :

/rep1/sous-rep11/MonFichier1
/rep1/sous-rep11/MonFichier2
etc...
donc TAR pas con, il va créer dans l'archive :

/rep1/sous-rep11/ MonFichier1 et MonFichier2

mais moi j'en veux pas de son "/rep1/" dans l'archive !

Juste ca :
/sous-rep11/ MonFichier1 et MonFichier2

Voilà Voiloû, j'espère que mon besoin est mieux explicité :-) ainsi la solution se situe dans l'interaction entre "find" et "tar" que vers "find" seul.
Si seulement cette option existait avec "tar" ca serait parfait, sauf que on ne peux pas dire : "Ne crée pas les n premiers dossiers de niveau supérieurs dans l'archive"

Hors ligne

 

#4 15 Dec 2006 13:48:16

bros
Affranchi(e)
 
Date d'inscription: 15 Dec 2006
Messages: 5

Re: Tar archiveur, limitation en sortie

Bonjour BOFH,

JE me penche sur ce que tu disais et je reviens vers toi ;-)

Hors ligne

 

#5 15 Dec 2006 13:55:06

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Tar archiveur, limitation en sortie

Hm, non, tar n'a pas besoin de noms absolus pour archiver des fichiers, les noms relatifs vont très bien.

En fait, c'est même le contraire: quand tu donnes à tar des noms de fichiers absolus, tar "ampute" le slash initial, et lors de l'extraction les chemins seront toujours interprétés par rapport au répertoire courant, parce que ce serait potentiellement dangereux d'avoir une archive dont les fichiers ne peuvent être extraits qu'a un emplacement absolu.

Hors ligne

 

#6 15 Dec 2006 14:34:12

bros
Affranchi(e)
 
Date d'inscription: 15 Dec 2006
Messages: 5

Re: Tar archiveur, limitation en sortie

Re Bofh;

En fait je viens de tester la commande avec tes options sans avoir tout à fait bien compris, ce qui donne ca :

find /home/bros -type f -mmin -3000 | tar cvzf ./fichierDumpFichiersRecents.tar.gz -T - -C /home/bros

Ce sur quoi il fonctionne normalement en m'insérant dans la nouvelle archive une dizaine de fichiers qu'il a rangé de cette façon :

/home/bros/ksh/fichier1.ksh
/home/bros/cfg/fichier2.ksh

mais je me retrouves donc toujours avec ce satané /home/bros...

Bros

Hors ligne

 

#7 15 Dec 2006 14:42:34

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: Tar archiveur, limitation en sortie

non, dans ce cas le -C ne sert à rien comme tu lui passes des fichiers absolus.

L'idée, c'est de d'abord faire un cd dans le répertoire à archiver, et faire "find ." de manière a obtenir des chemins relatifs. Comme les chemins sont relatifs, il faut soit lancer tar dans le même répertoire courant que le find (1ère option) ou utiliser -C pour lui faire changer de répertoire courant après avoir ouvert le fichier archive (c'est selon que tu as besoin de te référer au fichier archive par un chemin absolu ou pas; si le chemin est relatif, changer de répertoire courant avec la 1ere version de la commande va changer l'emplacement de ton archive).

Tu vas te retrouver avec des chemins de type "./truc/machin" dans l'archive, ce qui est équivalent à ce que tu cherches (le ./ n'a aucun effet et peut être ignoré).

Hors ligne

 

#8 15 Dec 2006 15:02:05

bros
Affranchi(e)
 
Date d'inscription: 15 Dec 2006
Messages: 5

Re: Tar archiveur, limitation en sortie

Re,

HA oui ca y est ca marche now ! Merci merci merci, ca implique effectivement de se placer dans le répertoire à partir duquel on veut chercher mais au moins le résultat est là ! Merci encore BOFH, je crois que je vais rameuter des inscrits sur ce forum histoire de le faire vivre encore un peu plus

See you soon,

Bros

Hors ligne

 

Pied de page des forums

Powered by FluxBB