#!/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 +x $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