Script unix - comparer plusieurs repertoires
pio_killer
Messages postés
62
Statut
Membre
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
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”.
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”.
A voir également:
- Script unix - comparer plusieurs repertoires
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Comparer prix amazon - Guide
- Meilleur prix Amazon : payer moins cher avec Amazin'Europe - Accueil - Commerce
4 réponses
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]$;-))
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.
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.
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
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
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
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 :
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;-)
[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!! :-))
... suer ;-)
JP. Hannibal Lecter de service ;-))