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 13/12/2007, à 15:56

jerepain

[bash]Compter les fichiers redondants

Bonjour,
Je dois faire un script pour compter les fichiers redondants dans un répertoire.
Voilà  ce que j'ai fait :

for j in *
	do
		for i in *
		do
			ii=`echo $i`
			jj=`echo $j`
			k=`diff -q $ii $jj`
			if [ -z "$k" ]
			then
				let "o=$o+1"
			fi
		done
	done
echo "Il y a $o fichiers redondants !!"

Seulement le fait d'imbriquer les 2 'for' fait compter plusieurs fois la même chose...

#2 Le 13/12/2007, à 16:22

freebird

Re : [bash]Compter les fichiers redondants

Tu veux un compteur global de fichiers redondants comme seul résultat ?

Edit : vu que dans ton calcul tu comptes :
- 1 fois chaque fichier
- 2 fois chaque fichier identique

Tu prends le total que tu as, tu y enlèves le nombre total de fichiers et tu divises par 2 lol

Ouais c'est sauvage comme méthode mais ça marche big_smile

Second edit : en fait non ça ne va pas, si 3 fichiers sont identiques il va te dire qu'il y en a 4 hmm

Dernière modification par freebird (Le 13/12/2007, à 16:37)

Hors ligne

#3 Le 14/12/2007, à 14:57

coca25

Re : [bash]Compter les fichiers redondants

une proposition:

#!/bin/bash

liste=( * )
nombre=$(( $(ls | wc -l) - 1))
resultat=0


for i in $(seq 0 $nombre)
do
  for j in  $(seq $(($i + 1)) $nombre)
  do
    echo -n Comparaison de "${liste[$i]}" et "${liste[$j]}"
    if diff -q "${liste[$i]}" "${liste[$j]}" > /dev/null
    then
      echo -n " +1"
      resultat=$(($resultat + 1))
    fi
    echo
  done
done

echo "Il y a $resultat couple de fichiers identiques !!"

Dernière modification par coca25 (Le 14/12/2007, à 22:40)

Hors ligne

#4 Le 14/12/2007, à 21:27

jerepain

Re : [bash]Compter les fichiers redondants

Ton code ne fonctionne pas, mais je te remercie quand même pour le dérangement tongue
Il me dit qu'il y a 6 couples de fichiers redondants, alors que dans mon répertoire j'ai 6 fichiers donc 4 redondants.

#5 Le 14/12/2007, à 22:39

coca25

Re : [bash]Compter les fichiers redondants

parce qu'il t'affiche le nombre de couples (les 4 fichiers sont identiques), je pensais que tu voulais le nombre de couples et non pas les fichiers, sinon, il suffit de modifier un peu:

#!/bin/bash

liste=( * )
inode_liste=( $(stat -c %i *) )
nombre=$(( $(ls | wc -l) - 1))
traite="1"
resultat=0


for i in $(seq 0 $nombre)
do
  for j in  $(seq $(($i + 1)) $nombre)
  do
    echo Comparaison de "${liste[$i]}" et "${liste[$j]}"
    if diff -q "${liste[$i]}" "${liste[$j]}" > /dev/null
    then
      if ! echo $traite | grep -q ",${inode_liste[$i]}"
      then
	traite="$traite,${inode_liste[$i]}"
        resultat=$(($resultat + 1))
      fi
      if ! echo $traite | grep -q ",${inode_liste[$j]}"
      then
	traite="$traite,${inode_liste[$j]}"
        resultat=$(($resultat + 1))
      fi
    fi
  done
done

echo "Il y a $resultat fichiers redondants"

Dernière modification par coca25 (Le 14/12/2007, à 23:40)

Hors ligne

#6 Le 14/12/2007, à 23:27

jerepain

Re : [bash]Compter les fichiers redondants

Merci, tu es un Dieu smile
Par contre y'a pas mal de choses que je ne comprends pas dans ton code :
-A quoi sert inode_liste ?
Que fait ceci :

traite="$traite,${inode_liste[$i]}"

Merci smile

#7 Le 14/12/2007, à 23:38

coca25

Re : [bash]Compter les fichiers redondants

pour ne pas recompter les fichiers, il fallait les mettre dans une liste, je pouvais mettre le nom, mais il peut contenir un espace ou une "," etc...
le truc unique au fichier auquel j'ai pensé est l'inode

Dernière modification par coca25 (Le 14/12/2007, à 23:40)

Hors ligne

#8 Le 15/12/2007, à 13:34

jerepain

Re : [bash]Compter les fichiers redondants

Merci, j'ai compris maintenant smile