#!/bin/bash
##################################################
# Fichier  : copie_selective_de_dossiers_zenity.sh
# But      : copier des dossiers choisis depuis un dossier de départ
# Détails  :
# Inspiré de   : http://sites.google.com/site/jovialubuntu/divers/script-export-rhythmbox
# Version      : 0.03 (20100929)
#
# Projets      :
# - sous-dossiers de niveau 1 seulement
# - utiliser rsync au lieu de cp -nrv
# - éviter les redondances (les sous-sous-dossiers sont déjà copiés par le soud-dossier parent)
# - copie sélective de fichiers
# - ETA = temps restant avant la fin
# - afficher taille totale
# - possibilité de chaîner les actions, et traiter plusieurs dossiers d'affilée
# - filtre de fichiers
# - vérifier la place restante sur la destination avant la copie
# - ne montrer que les dossiers possédant des fichiers
#
# Version 0.03 : remplacement --checkbox par --multiple (sélection plus facile)
# Version 0.02 : second_bash pour éviter pb guillemets
####################fin_entete####################
##################################################

RND=$RANDOM
Liste_Dossiers=~/Liste_copie_selective_de_dossiers_${RND}.txt
CmdZenityList=./Liste_copie_selective_de_dossiers_listeSelection.txt
second_bash=./copie_selective_de_dossiers_${RND}.sh
TITRE_COLONNE=Dossiers


# REPERTOIRE SOURCE ------------------
# sélectionne le répertoire de départ
if DirSource=$(zenity --file-selection= --directory --title="Choix du dossier de départ")
then
echo répertoire départ$DirSource
else
exit 0;
fi

# Construction liste dossiers
find "$DirSource" -type d sort $Liste_Dossiers

# SELECTION --------------------------
while read line
do
 cmd="$cmd \"$line\" "
 ((n=n+1))
 echo $n $line
done <$Liste_Dossiers


# on crée la commande de la boite de dialogue zenity de sélection
cmd="zenity --list --multiple --title \" export des dossiers\" --text \"Selectionner les dossiers à copier vers $DirDest\" --width 800 --height 600 --column $TITRE_COLONNE $cmd"
# on écrit le fichier bash pour l'affichage de la boite de dialogue
echo "#!/bin/bash" $CmdZenityList
echo "$cmd" >> $CmdZenityList
# on le rend exécutable
chmod +$CmdZenityList
#on l'exécute
echo $CmdZenityList
if cmd=`$CmdZenityList` then
echo "exécution cmd"
else
zenity --info --title="Export liste" --text="Opération annulée"
exit 0;
fi


# REPERTOIRE DESTINATION ------------------
if DirDest=$(zenity --file-selection= --directory --title="Choix du dossier destination")
then
echo répertoire destination$DirDestination
else
exit 0;
fi


# COPIE DOSSIER
# on ajoute un séparateur à la fin du résultat
cmd="$cmd|"
echo DirDest"$DirDest"
# on execute une boucle sur le résultat à chaque séparateur |
# copie des fichiers suivants
echo "$cmd" while read -d '|' line
do
 echo mkdir -p \"$DirDest$line\" >> $second_bash
 echo cp -nrv \"$line\" \"$(dirname "$DirDest$line")\" >> $second_bash
 # option de cp :
 # -r : récursif
 # -n : n'écrase pas le fichier existant
 # -v : verbeux
done
chmod u+x $second_bash
./$second_bash

# FIN OUVERTURE CIBLE---------------------------------------------------------------------------
zenity --question --title "Export liste" --text "Fichiers copiés sur:\n $DirDest \n Voulez vous ouvrir le répertoire cible?"
if "$?" != "1" ]
then
echo Ouverture nautilus
nautilus "$DirDest"
fi

# zenity --info --title=" " --text="Fin de script"

# Nettoyage
rm $Liste_Dossiers
rm $second_bash
rm $CmdZenityList