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 22/03/2011, 10h48   #1
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 35
Points : 35
Par défaut Comparer le contenu d'une liste de fichiers

Salut,

Je me confronte à une demande spécifique à quoi je ne trouve pas une piste; en gros j'ai un:

---rep1
-fichier1
-fichier2
-.....
-fichier n
Sous ce répertoire je doit comparer le contenu des fichiers (fichier1....fichier n)
les commande diff, cmp..ne m'aident pas trop car ils ne prennent pas plus que deux fichiers.
Quelqu'un a t-il une piste SVP ?

Merci,
benjmarwen est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 22/03/2011, 11h03   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
quand tu as plusieurs fichiers à comparer, il n'y a qu'une façon de faire, il faut définir un référent et comparer tout le reste unité/unité au référent.

ça s'applique aussi pour les fichiers .... tu vas donc devoir faire une boucle ou mieux un script qui mettra en prime les résultats en forme.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 17h36   #3
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 35
Points : 35
Salut,
Désolé pour le retard.
Je crois que je ne me suis pas bien expliqué.
Mon problème est que ce répertoire contient une liste de fichiers d'un projet; donc pas forcément qu'il y a un référent pour procéder à la comparaison.

Merci et désolé pour le manque de clarté.
benjmarwen est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/03/2011, 18h00   #4
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Ca n'est toujours pas clair.

j'ai ceci:
Code :
1
2
3
4
5
DOSSIER
├───Fichier1
├───Fichier2
├───Fichier3
└───Fichier4
Quel fichier veux-tu comparer à quel fichier ? Une comparaison ne peut se faire que entre deux fichiers (tout comme tu ne peux comparer que deux nombres ).
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/03/2011, 20h03   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
il veut comparer les 4 ou n fichiers ce qui implique d'en choisir un référent et de boucler pour comparer chaque autre fichier à ce référent.



Code :
for i in fichier[2-5] ; do diff fichier1 $i ; done
par exemple ici fichier1 est le referent et il y a 5 fichiers en tout
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 21h53   #6
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Citation:
Envoyé par frp31
il veut comparer les 4 ou n fichiers ce qui implique d'en choisir un référent
pas nécessairement...

Code bash4 :
1
2
3
4
5
6
7
8
9
10
11
12
declare -A aArr
for file in ./fichier*
do somme=$(md5sum "$file")
   somme=${somme%% *}
   aArr[${somme}]+="$file;"
done
 
for item in "${!aArr[@]}"
do echo "groupe $((++n))"
   IFS=';' read -a files <<< "${aArr[$item]}"
   printf '\t%s\n' "${files[@]}"
done
un fichier contient "abcd", les autres "abc" :
Code résultat :
1
2
3
4
5
6
7
groupe 1
	./fichier_c
groupe 2
	./fichier_a
	./fichier_b
	./fichier_d
	./fichier_e
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 30/03/2011, 10h37   #7
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 876
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 876
Points : 1 619
Points : 1 619
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Ah ok, bon soit...

Toujours intéressant de voir tes scripts N_BaH...
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/03/2011, 12h14   #8
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 35
Points : 35
Salut,
@frp31: merci bcp de ta réponse.
J'ai essayé une approche à cette boucle, mais je dois toujours peaufiner la sortie de la commande; c'est vrai que pour 5 fichiers par exemple ça reste lisible, mais pour une liste de 20 ou plus; cela devient vite ...

@N_BaH: merci bcp de ta réponse.
J'ai des questions stp:
1- sur Ubuntu (dash), ça marche pas
Code :
IFS=';' read -a files <<< "${aArr[$item]}"
me retourne
Code :
Syntax error: redirection unexpected
Cela dit je crois que la double redirection ne marche pas sur "dash"

2-
Code :
aArr[${somme}]+="$file;"
j'ai dû ajouter un signe "="
Code :
aArr=[${somme}]+="$file;"
Sinon il me retourne:
Code :
line 7: 3c06050502b02e69622edb4c30eed783: value too great for base (error token is "3c06050502b02e69622edb4c30eed783")
Après j'ai reproduis ton test; mais j'ai pas le même retour:

Code :
1
2
groupe 1
        [837fb16f5661bebf41839511aad8c6bc]+=./fichier2
J'ai testé sur un shell (bash)

Merci encore;
benjmarwen est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/03/2011, 12h34   #9
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
J'ai précisé qu'il fallait Bash4, à cause de l'emploi du tableau associatif.

les chaînes en ligne (herestring (<<<)) ne sont pas POSIX, ça ne fonctionnera donc pas avec dash; pas davantage que les tableaux, a fortiori les tableaux associatifs.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/03/2011, 13h56   #10
Nouveau Membre du Club
 
Inscription : juillet 2009
Messages : 29
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 29
Points : 35
Points : 35
Dslé, j'aurais du bien lire ton message avant de me jeter comme ça.
Un upgrade du bash, et tout roule.
benjmarwen est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/03/2011, 15h25   #11
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Merci pour la méthode N_BaH je me la note...

frp31 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 23h21.


 
 
 
 
Partenaires

Hébergement Web