#!/bin/bash


move=false
remove=false
input=`pwd`
out='./'
crc=true
nb_doublons=0
verbose=false
recursive=false
i=0

help=false

if [ $# -gt 0 ]
then
	if [ $1 = '-h' ] || [ $1 = '--help' ]
	then
		help=true
		echo -e '\nPermet de supprimer tous les fichiers similaires dans un dossier spécifique.'
		echo -e '\nUsage : doublons [OPTIONS] [REPERTOIRE]'
		echo -e 'Sans REPERTOIRE, applique le script sur le répertoire courant.'
		echo -e '\nOPTIONS : '
		echo -e '\t-h, −−help\taffiche cette aide, et quitte'
		echo -e '\t-d        \tefface les doublons détectés'
		echo -e '\t-o rep    \tdéplace les doublons détectés dans rep'
		echo -e '\t--no-crc  \tne calcule pas le CRC pour déterminer les doublons'
		echo -e '\t-v        \taffiche les actions effectuées\n'
#		echo -e '\t-r        \trechercher aussi dans les sous-dossiers\n'
	else
		while [ $# -gt 0 ] && [ ${1:0:1} = '-' ]
		do
			if [ $1 = '-d' ]
			then
				remove=true
				move=false
			elif [ $# -gt 1 ] && [ $1 = '-o' ]
			then
				shift
				out=$1
				remove=false
				move=true
			elif [ $1 = '--no-crc' ]
			then
				crc=false
				if [ $verbose = true ]
				then
					echo '==> CRC désactivé'
				fi
			elif [ $1 = '-v' ]
			then
				verbose=true
			else
				echo "Attention : $1 : Option inconnue"
			fi
		shift
		done
	fi
fi

if [ $help = false ]
then
	
	if [ $# -lt 1 ] || [ -d $1 ]
	then
		if [ $# -ge 1 ]
		then
			input=`pwd`'/'$1
#			cd $1
		fi
		list=`find -maxdepth 1 -type f`
	#	echo $list
		oldIFS=$IFS
		IFS=$'\n'
		
		for fic in $list
		do
			name=`basename $fic`
		#	echo $name
			file=$input'/'$name
			if [ -f $file ] && ! [ -L $file ]
			then
				if [ crc = true ]
				then
					dist=`jacksum $file | cut -d ' ' -f 1`
				else
					dist=`md5sum  $file | cut -d ' ' -f 1`
				fi
				add=true
				
				if [ $i -gt 0 ]
				then
					k=0
					for d in ${distance[*]}
					do
						if [ $dist == $d ]
						then
							if [ $verbose = true ]
							then
								echo -e "$fic est un doublon de ${fichiers[$k]}"
							fi
							add=false
							((nb_doublons++))
							if [ $move = true ]
							then
								mv $file $out
	#							if [ $verbose = true ]
	#							then
	#								echo -e "\t==> $file déplacé vers $out"
	#							fi
							elif [ $remove = true ]
							then
								rm $file
	#							if [ $verbose = true ]
	#							then
	#								echo -e "\t==> $file supprimé"
	#							fi
							fi
							break;
						fi
						((k++))
					done
				fi
				if [ $add ]
				then
					distance[$i]=$dist
					fichiers[$i]=$name
					((i++))
	#				if [ $verbose = true ]
	#				then
	#					echo "$file"
	#				fi
				fi
			fi
		done

		IFS=$oldIFS
	
		if [ $verbose = true ] && [ $nb_doublons -gt 0 ]
		then
			echo ''
		fi
		
		
		if [ $move = true ]
		then
			if [ $nb_doublons -gt 1 ]
			then
				echo "$nb_doublons doublons déplacés"
			elif [ $nb_doublons -eq 1 ]
			then
				echo 'Un seul doublon déplacé'
			else
				echo 'Aucun doublon détecté'
			fi
		elif [ $remove = true ]
		then
			if [ $nb_doublons -gt 1 ]
			then
				echo "$nb_doublons doublons supprimés"
			elif [ $nb_doublons -eq 1 ]
			then
				echo 'Un seul doublon supprimé'
			else
				echo 'Aucun doublon détecté'
			fi
		else
			if [ $nb_doublons -gt 1 ]
			then
				echo "$nb_doublons doublons détectés"
			elif [ $nb_doublons -eq 1 ]
			then
				echo 'Un seul doublon détecté'
			else
				echo 'Aucun doublon détecté'
			fi
		fi
	else
		echo "Attention : $1 n'est pas un dossier"
	fi
fi

