Script de comparaison du contenu des fichiers d'un dossier

Salut à tous,

J’aimerai faire un script qui me compare les différence entre les fichiers d’un répertoire. En gros je doit comparé le contenu des fichier situé dans /etc de 2 serveurs pour détecté toutes le différence qu’il pourrais y avoir.

J’ai commencé par ceci mais n’etant pas une bete de logique de programation j’aimerai voir si je me dirige dans la bonne voie.

# !/bin/bash

for i in $(find /etc -t file) and for j in $(find /etc-old -type f); do sdiff -sW $i $j > /root/tmp/$i.txt; done

J’ai pas l’impression que cela a l’air correct donc si vous avez des idées ou des conseils :slightly_smiling:

Merci

J’ai pensé a ca plutot qu’avec ce que j’ai mit au dessus:

[code]i=$(find /root/compare/etc-old -type f)
j=$(find /root/compare/etc-now -type f)

if cat $i -eq cat $j

then
echo " the file $i are the same of $j
else

sdiff -sW $i $j > $i(+1).txt

endif
[/code]

EDIT

Finalement je me dit que cela serait peut être mieux de créer 2 liste et qu’en fonction des corespondances de nom faire un sdiff des fichiers…

EDIT 2

Je vais plutot prendre l’options de la liste car j’ai avec ca le chemin complet, ce qui me permettera d’appéler plus facilement le fichier à comparé.

Vlà un début pour la recherche des fichiers: (mais je bloque sur la partie sed voir un autre post ^^)

for i in $(find . -type f | sort -n); do echo $i >> /tmp/compare.tmp && sed 's^./\\ /' /tmp/compare.tmp >> /tmp/compare-res.tmp; done

Salut,

Je me fait un petit monologue ^^

Je pense que avec ceci cela doit marcher:

# !/bin/sh

# VARIABLES #
#---------------#

FNOW=$(cat /tmp/compare.now.tmp)        # Variable du tableau de fichier now
FOLD=$(cat /tmp/compare.old.tmp)        #  "    "   "  "    "  "  "   "  old



# Lister les fichiers dans le repertoire et renvoyer la sortie dans un fichier temporaire.
# ---------------------------------------------------------------------------------------

for i in $(find /root/compare/etc/etc-old -type f | sort -n);
        do echo $i >> /tmp/compare.old.tmp && sed -i s/'^\.'//g /tmp/compare.old.tmp ;
done
# Folder 2

for i in $(find /root/compare/etc/etc-now -type f | sort -n);
        do echo $i >> /tmp/compare.now.tmp && sed -i s/'^\.'//g /tmp/compare.now.tmp ;
done

# Comparé les champs entre-eux


if [ $FNOW -eq $FOLD ]

   then sdiff -sW $FNOW $FOLD >> /root/tmp/compare-res/$FNOW.$FNOW.res.txt

   else echo "N'est pas présent sur le serveur actuel"

endif

exit

Donc pour résumer j’aimerais que le script me fasse une liste de tous les fichier de 2 répertoire, les compare et si les 2 fichier portant le même nom sont dans chacun des répertoire qui me fasse un sdiff vers un fichier.

Pour que je puisse comparer juste les fichiers commun au 2 et y voir les éventuelles différence. :slightly_smiling:

EDIT

J’ai l’impression que cela bloque au niveau du “if” ==> ./compare.sh: line 32: [: too many arguments

Comment puis-je faire pour que ce soit chaque ligne qui soit traité par le if et non la liste en entier ?

Euh…

[quote="‘man diff’"] -r --recursive
Recursively compare any subdirectories found.[/quote]Désolé de te casser ton joli monologue. :laughing:
Il y a aussi plein d’options sur comment traiter les fichiers absents dans l’un, etc…
Et tu peux derrière parser avec awk ou autre pour découper le résultat en une multitude de patchs.

Mais je voudrais seulement traité les fichiers commun car y’a 55000 fichiers en éliminant ceux ou il y a pas de changement j’espère arrivé…à…très très peu…pis AWK je n’y connais rien :stuck_out_tongue: (tu vas me dire “Ben ca s’apprend” pas faux ^^ )

Je fait totalement fausse route en faite ?

Jamais quand on se creuse la tête …

ha vi de fait la man de diff est différente de celle de sdiff…par contre j’aime mieux la mise en page de sdiff, mais les options ne sont pas les mêmes.

Ben vala j’ai effectué l’opération avec diff me reste plus que 2100 fichier à analyser, enfin j’èspère qu’avec un chti grep sur les différence je le réduirais encore par 10 ^^ espère

Sinon pour la question plus haut comment faire pour que dans un “if” un varable liste soit traite par ligne et non en vrac une petite réponce pour mon enrichissement personnel ?

Merci en tout cas :slightly_smiling:

@debianhadic: pas faux :slightly_smiling:

EDIT

je vais quand même mettre la solution ca peut toujours servir ^^

[code]
diff -srN rep1 rep2 ==> affiche le contenu des fichiers communs mais différents

&

diff -qrN rep1 rep2 ==> affiche juste les fichiers communs et différents[/code]