Seus scripts pegam o primeiro arquivo no diretório e comparam com todos os arquivos lá, assim o primeiro arquivo é verificado contra si mesmo. Que retornará o mesmo hash MD5. Porque $FILE
e $f
são exatamente iguais. Você deve alterar o script para comparar apenas os arquivos e evitar comparar um arquivo consigo mesmo:
#!/bin/bash
while true
do
echo "Enter the directory:"
read directory
if [ -d $directory ]; then
break
else
echo "Invalid directory"
fi
done
for FILE in 'ls $directory'
do
if [ ! -f $FILE ]; then
break;
fi
h='md5sum $directory/$FILE | awk '{ print $1 }''
for f in 'ls $directory'
do
if [ -f $f ] && [ $FILE != $f ]; then
s='md5sum $directory/$f | awk '{ print $1 }''
if [ "$s" = "$h" ]; then
echo Removing $f
rm -rf $directory/$f
fi
fi
done
done
Dito isto, você pode encontrar dois arquivos diferentes que lançam o mesmo hash MD5. Não é comum nem fácil, mas certamente não é impossível. Então, esse script pode excluir dois arquivos diferentes "pensando" que eles têm o mesmo conteúdo.
Um script mais seguro seria este:
#!/bin/bash
while true
do
echo "Enter the directory:"
read directory
if [ -d $directory ]; then
break
else
echo "Invalid directory"
fi
done
for FILE in 'ls $directory'
do
if [ ! -f $FILE ]; then
break;
fi
for f in 'ls $directory'
do
if [ -f $f ] && [ $FILE != $f ]; then
cmp -s $directory/$FILE $directory/$f
if [ "$?" -eq 0 ] ; then
echo Removing $f
rm -rf $directory/$f
fi
fi
done
done