[bash] aide pour un petit script
Résolu/Fermé
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
-
14 mars 2007 à 16:50
vec_8 Messages postés 2 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 1 décembre 2008 - 1 déc. 2008 à 02:59
vec_8 Messages postés 2 Date d'inscription lundi 1 décembre 2008 Statut Membre Dernière intervention 1 décembre 2008 - 1 déc. 2008 à 02:59
A voir également:
- [bash] aide pour un petit script
- Script vidéo youtube - Guide
- Petit colis distribution - Forum Réseaux sociaux
- Petit 3 ✓ - Forum Word
- Excel trier du plus grand au plus petit - Guide
- J'ai un petit 1 dans messenger qui s'affiche mais pas de message comment effacer ce 1 - Forum Facebook Messenger
3 réponses
jpzuate
Messages postés
56
Date d'inscription
dimanche 4 mars 2007
Statut
Contributeur
Dernière intervention
9 juin 2008
51
Modifié le 15 mars 2007 à 16:05
Modifié le 15 mars 2007 à 16:05
Hello ...
Voici une solution (j'espère :-))
Seul défaut à mon programme : il te donnera 2 fois l'information (A est identique à B et B est identique à A)
Hope this help :-)
Jean-Pierre Zuate
Voici une solution (j'espère :-))
#!/usr/bin/bash # # On valorise LISTE_FICHIERS avec une liste (ls) # Sauf le programme lui meme (basename ${0}) # $(xxxx) permet d'utiliser l'output d'une commande comme # un contenu de variable LISTE_FICHIERS=$(ls | grep -v $(basename ${0})) for FICHIER_1 in ${LISTE_FICHIERS} do # # Si repertoire, on passe au suivant [ -d ${FICHIER_1} ] && continue # # Checksum du fichier 1 CKS_F1=$(cksum ${FICHIER_1} | awk '{ printf "%s%s\n", $1, $2}') for FICHIER_2 in ${LISTE_FICHIERS} do # # Si repertoire, on passe au suivant [ -d ${FICHIER_2} ] && continue # # Si on examine le meme fichier, on passe au suivant [ ${FICHIER_1} = ${FICHIER_2} ] && continue # # Checksum du fichier 2 CKS_F2=$(cksum ${FICHIER_2} | awk '{ printf "%s%s\n", $1, $2}') # # Si les 2 checksum sont egaux, c'est le meme contenu (meme si ce n'est pas le meme nom) [ ${CKS_F1} -eq ${CKS_F2} ] && echo "${FICHIER_1} et ${FICHIER_2} sont identiques" done done
Seul défaut à mon programme : il te donnera 2 fois l'information (A est identique à B et B est identique à A)
Hope this help :-)
Jean-Pierre Zuate
jpzuate
Messages postés
56
Date d'inscription
dimanche 4 mars 2007
Statut
Contributeur
Dernière intervention
9 juin 2008
51
Modifié le 15 mars 2007 à 16:05
Modifié le 15 mars 2007 à 16:05
Pour émettre un message du style "tous les fichiers sont identiques", tu ajoutes après l'initialisation de la variable LISTE_FICHIERS le code suivant :
Puis tu remplace le test
par celui-ci
nb : je n'ai pas bien compris si tu souhaitais voir la liste des fichiers identiques, ou différents, ou ne rien voir. Selon le cas, tu enlève la ligne avec echo, ou tu en met une autre condtionnée par un else ...
Et à la fin du programme, tu ajoute :
diff pourquoi pas mais il va te montrer les différences entre 2 fichiers, or à priori ce n'est pas ce que tu cherches. Tu cherches à détecter si ils sont différents. Comparer le checksum me paraît dans ce cas plus opportun. En effet, le diff va effectuer une traitement sur chaque ligne de chaque fichier pour déterminer là où ils sont différents, alors que cksum va juste calculer le checksum et le nombre d'octets, ce qui est à priori plus rapide, en tout cas plus simple et je pense plus logique.
J'espère avoir répondu à tes attentes ...
Jean-Pierre Zuate
NB_FIC_IDENTIQUES=0
Puis tu remplace le test
[ ${CKS_F1} -eq ${CKS_F2} ] && echo "${FICHIER_1} et ${FICHIER_2} sont identiques"
par celui-ci
if [ ${CKS_F1} -eq ${CKS_F2} ] echo "${FICHIER_1} et ${FICHIER_2} sont identiques" NB_FIC_IDENTIQUES=$(( ${NB_FIC_IDENTIQUES} + 1 )) fi
nb : je n'ai pas bien compris si tu souhaitais voir la liste des fichiers identiques, ou différents, ou ne rien voir. Selon le cas, tu enlève la ligne avec echo, ou tu en met une autre condtionnée par un else ...
Et à la fin du programme, tu ajoute :
[ ${NB_FIC_IDENTIQUES} -ne 0 ] && echo "Il n'y a pas de fichiers identiques dans le repertoire ${PWD}"
diff pourquoi pas mais il va te montrer les différences entre 2 fichiers, or à priori ce n'est pas ce que tu cherches. Tu cherches à détecter si ils sont différents. Comparer le checksum me paraît dans ce cas plus opportun. En effet, le diff va effectuer une traitement sur chaque ligne de chaque fichier pour déterminer là où ils sont différents, alors que cksum va juste calculer le checksum et le nombre d'octets, ce qui est à priori plus rapide, en tout cas plus simple et je pense plus logique.
J'espère avoir répondu à tes attentes ...
Jean-Pierre Zuate
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
50
14 mars 2007 à 22:11
14 mars 2007 à 22:11
J'espère avoir répondu à tes attentes
Et plus que j'en esperais. Au passage, j'ai zippé 2 fichiers textes identiques, mais il ne le detecte pas. Donc, je prefere dezipper mais fichiers ensuite executer ce script.
Merci beaucoup Jean-Pierre et bonne soirée.
Et plus que j'en esperais. Au passage, j'ai zippé 2 fichiers textes identiques, mais il ne le detecte pas. Donc, je prefere dezipper mais fichiers ensuite executer ce script.
Merci beaucoup Jean-Pierre et bonne soirée.
jpzuate
Messages postés
56
Date d'inscription
dimanche 4 mars 2007
Statut
Contributeur
Dernière intervention
9 juin 2008
51
>
hssissen
Messages postés
844
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
9 janvier 2017
15 mars 2007 à 16:05
15 mars 2007 à 16:05
Hello,
Idée pour tes fichiers ZIP (mais sans grand garantie nonobstant) : peut-être tu peux remplacer cette ligne (et celle en rapport avec FICHIER_2) :
par celle-ci
Cdt
Idée pour tes fichiers ZIP (mais sans grand garantie nonobstant) : peut-être tu peux remplacer cette ligne (et celle en rapport avec FICHIER_2) :
cksum ${FICHIER_1} | awk '{ printf "%s%s\n", $1, $2}'
par celle-ci
md5sum ${FICHIER_1} | awk '{ printf "%s\n", $1}'
Cdt
vec_8
Messages postés
2
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
1 décembre 2008
1 déc. 2008 à 02:59
1 déc. 2008 à 02:59
Bonjour,
Je souhaiterai réaliser une comparaison analogue mais dans deux répertoires différents qui aurai une arborescence très proche. Pour supprimer les doublons dans le premier répertoire. Serait-il possible d'adapter ce script?
Merci d'avance
vec
Je souhaiterai réaliser une comparaison analogue mais dans deux répertoires différents qui aurai une arborescence très proche. Pour supprimer les doublons dans le premier répertoire. Serait-il possible d'adapter ce script?
Merci d'avance
vec
14 mars 2007 à 17:37
14 mars 2007 à 17:45
Merci de tes reponses.
14 mars 2007 à 17:51
Oui, bien entendu (ça devrait en tout cas). La commande cksum prend le checksum d'un fichier et compte le nombre de bytes.
Définition du checksum : http://www.dicodunet.com/definitions/google/checksum.htm
On gros avec le checksum on sait dire si ton fichier a été modifié ou pas, le chiffre qui vient après dit le nombre d'octets. La concaténation des 2 fait que, dans ton cas, tu peux en déduire qu'il s'agit du même fichier, mais qui porte un autre nom ...
14 mars 2007 à 19:46
Merci encore une fois.
14 mars 2007 à 20:16
S'il n'affiche rien, c'est peut-être qu'il n'y a pas 2 fichiers identiques dans ton répertoire ! ;-)
tu peux faire le test suivant :
puis tu exécutes le script. Il devrait théoriquement te dire que fichier1.txt et fichier3.txt sont identiques ...