#1 Le 04/12/2007, à 08:44
- Dehx
Script shell : comparaison de 2 repertoires
Bonjour,
voila j'ai realisé un petit script shell qui permet, en passant 2 repertoire en argument, de les comparer et de renvoyer un code annonçant s'ils sont identique ou non (dans leur contenu aussi).
Le probleme est que j'ai besoin de me deplacer dans les repertoire dans le script, et que ça me renvoi cette erreur "can't cd to..."
Voici mon code :
# si le nombre d'arguments n'est pas egal a 2
if [ $# -ne 2 ]; then
echo "Erreur : Il faut 2 arguments."
# sinon, si le nombre d'arguments est egal a 2
elif [ $# -eq 2 ]; then
path=`pwd`
# si les deux arguments sont des repertoires
if [ -d $1 ] && [ -d $2 ]; then
# on liste le contenu du repertoire qui contient le plus d'elements
if [ `ls -l $1 | wc -l` -gt `ls -l $2 | wc -l` ]; then
rep1=$1
rep2=$2
else
rep1=$2
rep2=$1
fi
# listage du repertoire qui a le plus d'elements
contentrep1=`ls $rep1`
# on les elements de rep1
for var in $contentrep1
do
# on se place dans $rep1
cd $rep1
# si $var est un fichier dans $rep1
if [ -f $var ]; then
# on se place dans rep2
cd $rep2
# si $var n'est pas un fichier dans $rep2
if [ ! -f $var ]; then
echo "Code de retour : 1"
exit 1
fi
# sinon, si $var est un repertoire dans $rep1
elif [ -d $var ]; then
# on se place dans $rep2
cd $rep2
# si $var n'est pas un repertoire dans $rep2
if [ ! -d $var ]; then
echo "Code de retour : 1"
exit 1
fi
fi
done
# si on arrive ici, c'est que les deux repertoires sont identiques
echo "Code de retour : 0"
exit 0
fi
fi
Voila, j'ai essayé plein de bidouillages syntaxique mais je n'y arrive pas
Si quelqu'un connait une solution ou une alternative merci d'avance
++
#2 Le 04/12/2007, à 10:45
- best_friend_fr
Re : Script shell : comparaison de 2 repertoires
Salut,
Et euh,
diff rep1 rep2
ne fait pas ce que tu veux ?
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#3 Le 04/12/2007, à 10:48
- best_friend_fr
Re : Script shell : comparaison de 2 repertoires
Et je ferais remarquer que si un repertoire a plus d'elements que l'autre, ils sont pas identiques... pas la peine de chercher.
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#4 Le 04/12/2007, à 10:57
- best_friend_fr
Re : Script shell : comparaison de 2 repertoires
et pour ton erreur, c'est tout simplement parce que tu fais
compare rep1 rep2
il fait cd rep1
puis cd rep2
Il cherche donc rep2 dans rep1 et le trouve pas.
Il faut soit que rep1 et rep2 soit des chemins absolus, soit que tu fasse
cd -
avant chaque cd.
sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr
Hors ligne
#5 Le 04/12/2007, à 20:10
- Dehx
Re : Script shell : comparaison de 2 repertoires
Ok, c'etait donc une simple erreur de logique. Merci ^^
Ma solution :
path=`pwd` au debut du script ;
cd $path avant chaque cd ;
ça marche .
J'ai essayé cd - mais ça marche pas top
Et sinon, je n'utilise pas diff, parce qu'il s'agit d'un exercice donné par un professeur, et que dans ce cas, ce n'est pas vraiment le resultat qui compte, mais l'algo employé.