#!/bin/bash
##################################################
# Fichier  : comparer_compression.sh
# But      : comparer un fichier/dossier et déterminer l'archive la plus compacte
# Détails  : 
#            
# Modifié  : 2014118
# TO DO    : rechercher les dossiers qui contiennent des groupes de fichiers d'une même extension (pdf par exemple qui se compressent bien en groupe)
####################fin_entete####################
##################################################

dossDepart="$(pwd)"
supprimerTEMP="TRUE"

ligne_commande () {
if $# ] ; then
 aide_compar_compress
 return 0
fi

#~ if ! verifier_dependances.sh xz rar zip 7za ; then
 #~ return 1
#~ fi

# xz rar zip 7za

if -f "$1" ] ; then
 d=$(mktemp -d) echo "$(date) création du dossier temporaire $d"
 cp "$1" $d
 cd $d
 zipper_fichier "$1"
elif -d "$1" ] ; then
 zipper_dossiers_DIRECT "$1"
 return 0
else
 echo "$(date) $1 n'est ni un dossier ni un fichier. FIN."
 return 1
fi

echo Le dernier fichier est le plus petit.
# copier le fichier le plus petit de /tmp vers $dossDepart
#~ mv "$(ls -S *archive_* | tail -1)" "$dossDepart"
#~ [ $supprimerTEMP = "TRUE" ] && rm -rf $d
}

zipper_fichier () {
# fonctionne bien
archive="$(basename "$1")"
echo "$(date) Fichier" 
echo "$(date) 1/6 zip" nice zip                "$archive.zip" "$1" > /dev/null 2> /dev/null 
echo "$(date) 2/6 rar" nice rar a              "$archive.rar" "$1" > /dev/null 2> /dev/null
echo "$(date) 3/6 tar .tgz" nice tar -cz -f    "$archive.tgz" "$1" > /dev/null 2> /dev/null
#~ echo "$(date) 4/6 tar .xz" ; nice tar -c --xz -f "$archive.xz"  "$1" > /dev/null 2> /dev/null
echo "$(date) 5/6 7za normal" nice 7za a -t7z  "$archive.7z"  "$1" > /dev/null 2> /dev/null
echo "$(date) 6/6 7za ultra" nice 7za a -t7z -m0=lzma -mx=-mfb=64 -md=32-ms=on "${archive}_ULTRA.7z" "$1" > /dev/null 2> /dev/null

# copier le fichier le plus petit de /tmp vers $dossDepart
dossDest="$(dirname "$1")"
ls -lS "$archive"* | tee "$dossDest"/$(basename $0).log
cp -"$(ls -S "$archive"* | tail -1)" "$dossDest"
}

zipper_dossiers_DIRECT () {
# $1 = dossier à zipper
cd "$1"
echo "---------------------------------------------------------------------------"
echo "DEBUG DOSSIER COURANT = $(pwd)"
archive="$(basename "$1")"
echo "DEBUG archive="$archive.zip""
echo "DEBUG Attention toutes les archives vont être créées dans le dossier parent"
echo Espace libre $(df -h . | tail -1 | awk '{ print $4 }')
echo Espace total $(df -h . | tail -1 | awk '{ print $2 }')
echo "---------------------------------------------------------------------------"
sleep 5    
echo "$(date) Dossier" 
echo "$(date) zip" banner zip nice zip -r         "../$archive.zip" # > /dev/null 2> /dev/null 
echo "$(date) rar" banner rar nice rar a -r       "../$archive.rar" # > /dev/null 2> /dev/null
echo "$(date) tgz" banner tgz nice tar -cz -f     "../$archive.tgz" # > /dev/null 2> /dev/null
    #~ echo "$(date) txz" ; nice tar -c --xz -f "$archive.xz"  "$1" > /dev/null 2> /dev/null
echo "$(date) 7za" banner 7z  nice 7za a -t7z     "../$archive.7z"  # > /dev/null 2> /dev/null
sleep 1
#~ echo "$(date) 7za ultra" ; nice 7za a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on "${archive}_ULTRA.7z" "$1" # > /dev/null 2> /dev/null


# copier le fichier le plus petit de /tmp vers $dossDepart
dossDest="$(dirname "$1")"
cd ..
echo "------------------------------------"
echo "- Dossier le plus compact en dernier"
echo "------------------------------------"
ls -lS "$archive".*
#~ ls -lS "$archive"* | tee "$dossDest"/$(basename $0).log
#~ mv -vn "$(ls -S "$archive"* | tail -1)" "$dossDest"
}

#~ zipper_dossiers () {
#~ echo "$(date) Les données vont être compressées sous 6 formats :" 
#~ echo "$(date) zip, rar, tar.gz, tar.xz, 7z, 7z ultra" 
#~ echo "$(date) Soyez patients." 
#~ echo "$(date) Dossier courant $(pwd)" 
#~ echo "$(date) zip" ; nice zip -r "/tmp/$1_archive_.zip" "./" > /dev/null 2> /dev/null 
#~ echo "$(date) rar" ; nice rar a -r "/tmp/$1_archive_.rar" "./" > /dev/null 2> /dev/null
#~ echo "$(date) tar .tgz" ; nice tar -cz -f "/tmp/$1_archive_.tgz" "./" > /dev/null 2> /dev/null
#~ echo "$(date) tar .xz" ; nice tar -c --xz -f "/tmp/$1_archive_.xz" "./" > /dev/null 2> /dev/null
#~ echo "$(date) 7za " ; nice 7za a -t7z "/tmp/$1_archive_.7z" "./" > /dev/null 2> /dev/null
#~ echo "$(date) 7za ultra" ; nice 7za a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on "/tmp/$1_archive_ULTRA.7z" "./" > /dev/null 2> /dev/null
#~ 
#~ # copier le fichier le plus petit de /tmp vers $dossDepart
#~ cd /tmp
#~ cp -v "$(ls -S $1_archive_* | tail -1)" "$dossDepart"
#~ }

aide_compar_compress () {
echo "Utilisation : $0 [fichier | dossier] ..."
echo ""
echo "Compresser un fichier/dossier avec différents outils pour comparer"
echo "les taux de compression."
echo ""
echo "Exemple 1 :"
echo " $(basename $0) fichier.pdf"
echo "  va copier fichier.pdf dans un dossier temporaire et le compacter avec plusieurs outils"
echo ""
echo "Exemple 2 :"
echo " $(basename $0) Documents"
echo "  va copier le dossier Documents dans un dossier temporaire et le compacter avec plusieurs outils"
echo
echo "A la fin, le fichier le plus petit sera copié de /tmp vers $dossDepart".
echo ""
echo "Exemple 3 :"
echo " $(basename $0) -l liste_de_dossiers.txt"
echo "  va compresser chaque dossier de liste_de_dossiers.txt en prenant l'archive la plus compacte"
echo "  et en affichant les statistiques finales (gain final de compression)."
echo
}

ligne_commande "$@"