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 16/02/2011, 11h19   #1
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
Par défaut Comparer deux fichiers

Bonjour.

Je voudrais comparer deux fichiers à l'aide de la commande cksum ou md5sum, mais je rencontre un problème ( comme d'habitude )

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/ksh
#variables
FICHIER1=/chemin
FICHIER2=/chemin
 
#checksum du fichier1
CK_F1=$(cksum ${FICHIER1})
CK_F2=$(cksum ${FICHIER2})
 
 
if [ 'echo $CK_F1' = 'echo $CK_F2' ]
	then
	echo " fichier identiques"
	else
		echo " fichier diffèrents"
fi
quand je lance mon script

Code :
./cksum.sh fichier différents
Il devrait afficher fichier identiques vu que le cksum a la main le prouve

Est-ce mon "if" qui ne fonctionne pas ?
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h52   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Des quotes simples autour d'une variable empêchent l'interprétation de celle-ci

Code :
if [ "$CK_F1" = "$CK_F2" ]
Devrait aller mieux
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 11h57   #3
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
ça ne change rien
tojours " fichiers diférents" alors qu'ils sont identiques
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 12h23   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Et comme ça ?

Code :
if [ "${CK_F1% *}" = "${CK_F2% *}" ]
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 12h27   #5
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
pareil
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 13h04   #6
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Affiche le contenu de tes 2 variables s'il te plaît, merci.
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 14h00   #7
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
Code :
1
2
FICHIER1: titi.txt
FICHIER2:toto.txt
Lorsque je tape les commandes à la main voila les résultats :
Code :
1
2
3
4
5
6
cksum titi.txt
2494895256      515 titi.txt
 
cksum toto.txt
 
2494895256      515 toto.txt
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 14h03   #8
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
vu que le nom des fichiers sont diffèrents ( toto et titi) pour lui le cksum aussi est différent?
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 14h10   #9
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
Question bête.
pourquoi ne pas utiliser la commande cmp tout simplement?

http://linux.die.net/man/1/cmp

Code ksh :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
cmp -s fichier1 fichier2
case $? in
  0) 
    echo "Fichier identiques" 
    ;;
  1)
    echo "Fichier différents"
    ;;
  *)
    echo "Une erreur s'est produite"
    ;;
esac
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 14h15   #10
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
Bonjour,

tout comme wc n'affiche pas le nom du fichier quand on redirige ce dernier vers la commande :
Code :
1
2
cksum <monFichier
1642515484 2542
ainsi, pas besoin du remplacement de paramètres que proposait zipe31 à 12h23.
Code :
1
2
3
4
if test "$(cksum <monFichier)" = "$(cksum <monAutreFichier)"
then echo ok
else echo KO
fi
Citation:
Envoyé par jabbounet
pourquoi ne pas utiliser la commande cmp tout simplement?

Code ksh :
1
2
3
4
5
6
7
8
 
cmp -s fichier1 fichier2
if [ $? -eq 0 ] 
then
  echo "Fichier identiques"
else 
  echo "Fichier différents"
fi
pourquoi pas, mais alors, directement :
Code :
1
2
3
4
5
6
if cmp -s fichier1 fichier2
then
  echo "Fichier identiques"
else 
  echo "Fichier différents"
fi
edit: ah, oui; avec case, c'est mieux.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/02/2011, 14h19   #11
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
Citation:
Envoyé par N_BaH Voir le message
[code]

pourquoi pas, mais alors, directement :
Code :
1
2
3
4
5
6
if cmp -s fichier1 fichier2
then
  echo "Fichier identiques"
else 
  echo "Fichier différents"
fi
edit: ah, oui; avec case, c'est mieux.
oui, effectivement.
Cependant en relistant le man de cmp j'ai vu qu'il y'a trois cas a gérer 0,1, ou >1... j'ai adapté mon poste en conséquence, il faudra un jour que j'arrete les post incrémentaux.....
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/02/2011, 14h22   #12
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
le pb venait bien des différents nom de fichiers
j'ai donc après mon cksum supprimé le nom du fichier et c'est bon
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 14h23   #13
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
ou alors tu utilises cut pour isoler la partie qui t'intéresse:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
 
#variables
FICHIER1=test1
FICHIER2=test2
 
#checksum du fichier1
CK_F1=$(cksum ${FICHIER1} | cut -d' ' -f1,2)
CK_F2=$(cksum ${FICHIER2} | cut -d' ' -f1,2)
 
 
if [ "$CK_F1" = "$CK_F2" ]
then
  echo " fichier identiques"
else
  echo " fichier diffèrents"
fi
mais la solution avec la redirection est plus simple
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/02/2011, 14h31   #14
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
yes
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 15h06   #15
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
Si maintenant imaginons que les fichiers sont différents, comment afficher le caractère qui diffère ou l'espace en trop ou le retour chariot? ...etc?

avec un ...print??
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 15h41   #16
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
avec les bonnes options, diff est suffisant.
http://linux.die.net/man/1/diff

et pour la question potentielle suivante qui consite a creer/utiliser un patch:
http://www.tux-planet.fr/utilisation...ch-sous-linux/
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 16h23   #17
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
Moi ce que je voudrais c'est d'aprés mon 1er script, si les fichier sont différents ( donc lorsque "fichier diffèrents" s'affiche ) alors il ya un affichage du diff de l'erreur...
diff me paraît adapté mais cherché le caractère précis me paraît compliqué
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 14h15   #18
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
j'ai des questions svp
1:Comment afficher l'erreur précise en question?
diff indique seulement la ligne ...etc

2: Quand on compare un fichier comment dissocier l'absence d'une lettre ou mots d'une différence d'une lettre ou mots?
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 12h24   #19
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 703
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 703
Points : 2 115
Points : 2 115
autant les différence sont facile a voire par l'oeil humain, autant les algorithme de diff sont complexe.

Détecter la première différence est facile, mais comment déterminer par exemple s'il s'agit :
  • d'un ajout
  • d'une suppression
  • d'un bloc déplacé

la ou cela se corse c'est Déterminer ou se termine la différence. diff fournit quelque chose de synthétique si tu sais le lire et prend en compte pas mal de format/présentations possible.

Quelques lecture pour parfaire la connaissance de diff:
http://research.janelia.org/myers/Pa...comparison.pdf
http://en.wikipedia.org/wiki/Diff


Si les différence sur tes fichiers sont prévisible, tu peux coder toi même ton algorithme.
__________________
BAZAR est un joyeux bordel improvisé ! Tous les mardis.
http://www.improetcompagnie.com/publ...ctacles-6.html

Citation:
Envoyé par Isaac Asimov
Pour réussir, il ne suffit pas de prévoir. Il faut aussi savoir improviser
Pour les utilisateurs d'emacs:
http://www.emacswiki.org/

Attends de voir ce qui vas sortir de:
http://www.pushmid.com
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 17h01   #20
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
il est reparti sur un autre sujet
Alek-C 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 13h46.


 
 
 
 
Partenaires

Hébergement Web