Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/12/2006, 18h05   #1
Membre à l'essai
 
Inscription : décembre 2006
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 61
Points : 23
Points : 23
Par défaut Limiter le niveau d'arborescence des répertoires archivés

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

bros_70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2006, 10h41   #2
Membre à l'essai
 
Inscription : décembre 2006
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 61
Points : 23
Points : 23
Par défaut Suite plus clair

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"

bros_70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2006, 15h05   #3
Membre à l'essai
 
Inscription : décembre 2006
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 61
Points : 23
Points : 23
Par défaut Résolu

CA y est résolu, en fait il falait d'abord se rendre dans le répertoire Racine, ce qui donne :

cd /repertoireRacine/ ;

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

Le "find ." fesant toute la différence
bros_70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2006, 17h01   #4
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 944
Points : 4 944
Tu peux alors mettre la balise résolu !
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h58.


 
 
 
 
Partenaires

Hébergement Web