#!/usr/bin/bash
# Find and remove repeated (RPM) packages, But saving newest!
# Exit code 0 = done successfully
# Exit code 1 = target directory not found
# Exit code 2 = target directory Permission denied
# Sun Aug 29 06:56:54 EET 2010
# Ehab El-Gedawy <ehabsas@gmail.com>

[[ -n $1 && -d $1 ]] ||  exit 1 
TargetDir=$(echo  $1 | sed 's/\/$//')
[ -e $TargetDir/repeated/ ] || mkdir $TargetDir/repeated || exit 2
[ -e $TargetDir/Packages/ ] || mkdir $TargetDir/Packages 
mv $TargetDir/*.rpm $TargetDir/Packages/
RemRep()
{
    echo -e "All repeated packages will be moved into: $TargetDir/repeated/"
    echo -e '---------------------------------------------------------'
    echo -e "---------------------------------------------------------\
    \n\t\t\t$(date)\nYou can delete ($TargetDir/repeated/) \
    to save some space\nRepeated packages are:\n" >> ~/Desktop/remove\ repeated\ \(RPM\)\ packages.log
     
    for a in $(rpm --qf '%{Name}\n' -qp "$TargetDir/Packages/*.rpm" | sort | uniq -d)
    do
        Skip=0
        for b in $(ls -Xr1 $TargetDir/Packages/$a-[0-9]*.i*.rpm 2>/dev/null)
        do
            [ $Skip -ne 0 ] && echo -e "Moving file: $(basename $b)." && 
            mv $b $TargetDir/repeated/ &&
            echo -e "Moving file: $(basename $b), To ./repeated/$(basename $b)" >> \
            ~/Desktop/remove\ repeated\ \(RPM\)\ packages.log
            Skip=1
        done
        Skip=0
        for b in $(ls -Xr1 $TargetDir/Packages/$a-[0-9]*.x*.rpm 2>/dev/null)
        do
            [ $Skip -ne 0 ] && echo -e "Moving file: $(basename $b)." && 
            mv $b $TargetDir/repeated/ &&
            echo -e "Moving file: $(basename $b), To ./repeated/$(basename $b)" >> \
            ~/Desktop/remove\ repeated\ \(RPM\)\ packages.log
            Skip=1
        done
    done
    echo -e '---------------------------------------------------------'
    echo -e "You can delete ($TargetDir/repeated/) to save some space"
}
CPNew()
{
    echo -e 'Copying New packages please wait .....'
    for a in $(find /var/cache/yum/ -iname '*.rpm') 
    do
        [[ -e "$TargetDir/Packages/$(basename $a)" || \
           -e "$TargetDir/repeated/$(basename $a)" ]] || \
        cp $a "$TargetDir/Packages/" 
    done
    echo -e 'Done.\n'
}
#[ "S$2" == "S-b" ] && CPNew
CPNew
RemRep
createrepo --update $TargetDir/Packages
exit 0

