#!/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 [ $# = 0 ] ; 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=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")"
ls -lS "$archive"* | tee "$dossDest"/$(basename $0).log
cp -v "$(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 "$@"