Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 big_smile.

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é.