Rechercher : dans
Par :

Script unix - comparer plusieurs repertoires

Dernière réponse le 28 jan 2007 à 11:33:03 pio_killer, le 19 jan 2007 à 06:14:32 
 Signaler ce message aux modérateurs

Bonjour,
Tout d'abord, sachez que je suis novice en matière de script unix.
Voici mon problème:

J’ai 3 repertoires.

REP01 (repertoire de 1 er niveau)
REP02 (repertoire de 2 ème niveau)
REP03 (repertoire de 3 ème niveau)

Dans chaques repertoire, il y a des fichiers texte.
Les fichiers suivent le parcours suivant:
-On crée un fichier dans REP03
-On le déplace dans REP02
-On le déplace pour le stocker dans REP01

Si on veut modifié un fichier, on le copie dans REP03 et on refait le parcours. Dans cas, on se trouve avec le même fichier dans 2 repertoires.
------------------------------------------------------------­---------------------
Exemple:
Liste des noms de fichier:
Titi
Toto
Tutu
Tata

Position des fichiers.

Fichier dans REP03
Titi
tutu

Fichier dans REP02
toto

Fichier dans REP01
Tutu
tata

En fait les fichiers sont, positionnés soit dans REP01 ou REP02 ou REP03 tout en sachant qu’ils peuvent se trouver dans REP01 qui est le repertoire final.

Je voudrais sortir une liste des fichier en fonction de leur position mais en gardant toujours le plus grand niveau.

Pour cet exemple:

/REP03/titi
/REP03/tutu
/REP02/toto
/REP01/tata
ici, on ne prend pas tutu dans REP01 car il se trouve dans REP3 (REP03 qui est d’un niveau superieur).

Ensuite, pour chaque fichier, il faudrait récupérer la première ligne.

Et mettre le tout dans un fichier nommé “extract”.

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « script unix comparer plusieurs repertoires » dans :
[PHP] Lister le contenu d'un répertoire VoirGrâce à PHP, il est possible d'afficher le contenu d'un répertoire et de ses sous-répertoires. Voici ci-dessous une fonction permettant de parcourir récursivement les répertoires et sous-répertoires et d'en afficher les fichiers : function...
Screenshot.sh VoirCapture d'écran Présentation Prérequis Syntaxe Utilisation Code source Screenshots Liens Présentation Voilà un petit script basé sur les outils d'ImageMagic pour réaliser des captures d'écran (complètes ou partielles), avec en prime...
Installation d'un serveur Web sous Linux (Apache, PHP et MySQL) VoirIntroduction Un serveur web est un logiciel permettant de rendre accessibles à de nombreux ordinateurs (les clients) des pages web stockées sur le disque. Cette fiche pratique explique comment installer le serveur web Apache sur un système de type...
Caractéristiques de VBScript VoirEnvironnement d'exécution VBScript est un langage s'intégrant dans des applications «hôtes», appelées conteneurs (en anglais «Scripting hosts»). Ainsi le conteneur fournit un environnement d'exécution ainsi qu'un certain nombre d'objets...

1

jipicy, le 20 jan 2007 à 13:48:53

Salut,

[jp@MDK tmpfs]$ ls -R

.:
REP01/  REP02/  REP03/

./REP01:
Tata  Tutu

./REP02:
Toto

./REP03:
Titi  Tutu

[jp@MDK tmpfs]$ for fich in $(find . -type f); do (echo -e "$fich : \c") >> fich.txt && sed -n '1p' $fich >> fich.txt; done

[jp@MDK tmpfs]$ cat fich.txt | sed 's%/% %2' | sort -r +2 | uniq -f 2 | sort -r | sed 's% %/%1;s%\.%%' > extract.txt

[jp@MDK tmpfs]$ cat extract.txt

/REP03/Tutu : Ceci est la 1ère ligne de Tutu
/REP03/Titi : Ceci est la 1ère ligne de Titi
/REP02/Toto : Ceci est la 1ère ligne de Toto
/REP01/Tata : Ceci est la 1ère ligne de Tata

[jp@MDK tmpfs]$
;-))
Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

2

kilian, le 20 jan 2007 à 14:32:40

[jp@MDK tmpfs]$ for fich in $(find . -type f); do (echo -e "$fich : \c") >> fich.txt && sed -n '1p' $fich >> fich.txt; done

[jp@MDK tmpfs]$ cat fich.txt | sed 's%/% %2' | sort -r +2 | uniq -f 2 | sort -r | sed 's% %/%1;s%\.%%' > extract.txt


Quelle barbarie!! :-))

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

3

jipicy, le 20 jan 2007 à 14:39:23

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le... plaisir de se faire ...












































... suer ;-)

JP. Hannibal Lecter de service ;-)) Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

4

pio_killer, le 22 jan 2007 à 19:49:48

Bonjour,
tes commandes marchent bien mais seulement pour des repertoires nommés comme dans cet exemple.
Je voudrais en fait pouvoir, pour autant de repertoire nécessaire, donner un ordre.
Par exemple (toujours avec le système de niveau):

répertoire "travail" => niveau3
répertoire "fini" => niveau 2
répertoire "stockage"=> niveau 1

Il faut tjrs le niveau le plus haut.

Répondre à pio_killer

5

pio_killer, le 28 jan 2007 à 10:26:56

Y'a personne qui peut m'aider ?

Répondre à pio_killer

6

lami20j, le 28 jan 2007 à 11:29:38

Salut,

tes commandes marchent bien mais seulement pour des repertoires nommés comme dans cet exemple.

Ton affirmation est fausse.
Dans son exemple jipicy n'utilise pas des répertoires nommés (enfin un répertoire doit avoir un nom), il cherche dans l'arborescence de répertoire courant qui dans son cas est tmpfs.
Il s'en fiche completement de ce qu'il y a dédans
Cette commande cherche toutes le fichier de type regulier dans le répertoire courn et ensuite par rapport à leur appartenance il fait le traitement

for fich in $(find . -type f)
Donc peut être tu dois être un peu plus clair.

D'ailleurs il a fait ce que tu as demandé
J’ai 3 repertoires.

REP01 (repertoire de 1 er niveau)
REP02 (repertoire de 2 ème niveau)
REP03 (repertoire de 3 ème niveau)


Si je ne me trompe pas maintenant tu veux autre chose

supposons que la racine de ton arborescence s'appelle sauvegarde
donc /home/user/sauvegarde

tu veux dire que

répertoire "travail" => niveau3
répertoire "fini" => niveau 2
répertoire "stockage"=> niveau 1

travail, fini, stockage se trouve dans sauvegarde mais qu'ils ont un certains niveau?!
en ce cas il faut etablir manuellement le niveau avec un couple de genre
nom=>niveau

perso je ne comprends pas exactement ce que tu veux.

tu peux détailler avec un exemple de ce que tu veux obtenir
1. la diversité de l'arborescence de départ
2. ce que tu veux obtenir
lami20j

Répondre à lami20j

7

 jipicy, le 28 jan 2007 à 11:33:03

Ben tu exécutes le script sans te soucier des noms de répertoires.
Puis une fois que tu as ton fichier "extract", tu affectes les répertoires qui t'intéressent à des variables :

niv1="stockage"
niv2="fini"
niv3="travail"
puis tu à l'aide de "grep" tu filtres le tout :
grep $niv3 extract.txt | sort >> final.txt
grep $niv2 extract.txt | sort >> final.txt
grep $niv1 extract.txt | sort >> final.txt
;-) Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy