#!/bin/bash #---------------------------------------------------------------------------------------------------- #~ Nom : nom_du_script #~ Description : Ceci est la description du script #~ Auteur : Etienne Girault #~ #~ Usage : [-h] [-D] [-V] #~ #~ Options : -h, --help ; Affiche l'aide #~ Options : -V, --version ; Affiche la version #~ Options : -D, --debug ; Mode debug #---------------------------------------------------------------------------------------------------- # Déclaration des variables #---------------------------------------------------------------------------------------------------- script_name="$(grep '^#~ Nom' "$0" | sed 's/^.*: //')" script_version="$(grep '^#~ v' "$0" | tail -1 | sed -e 's/^#~ //' -e 's/ *\-.*$//')" ebook_download_dir=/data/download ebook_dest_dir=/srv/owncloud/data/Ebook/files user_used=www-data occ_bin=/srv/owncloud/occ mode_verbose=0 new_ebook=0 sudoing="" #---------------------------------------------------------------------------------------------------- # Déclaraition des fonctions #---------------------------------------------------------------------------------------------------- print_script_name_version() { echo "$script_name $script_version" && sed -n '/^#~ Version/,$p' "$0" | grep '^#~' | sed 's/^#~ //'; } print_script_description() { grep '^#~ Description' "$0" | sed 's/^.*: //'; } print_script_usage() { grep '^#~ Usage' "$0" | sed -e 's/^.*: //' -e '1 s/^/Usage: '"$script_name"' /' -e '2,$ s/^/'"$(printf '%*s' "$(echo "Usage: $script_name" | wc -c)")"'/'; } print_script_options() { echo "Options" && grep '^#~ Options' "$0" | sed -e 's/^.*://' -e 's/^ --/ --/' | column -ts \;; } print_script_help() { echo "$script_name $script_version" && print_script_description && print_script_usage && print_script_options; } exit_msg() { echo $1; exit $2; } prerunning_test() { # Test si l'utilsateur n'est pas $user_used if [[ $(whoami) != $user_used ]]; then # Test si l'utilisateur peut lancer des commandes en tant que $user_used if sudo -u $user_used -n true 2> /dev/null; then # Active le mode sudo sudoing="sudo -u $user_used" else exit_msg "Impossible de lancer des commandes en tant que $user_used" fi fi [ -d $ebook_download_dir ] || exit_msg "Le répertoire de téléchargement ($ebook_download_dir) est inaccessible" 1 [ -d $ebook_dest_dir ] || exit_msg "Le répertoire de destination ($ebook_dest_dir) est inaccessible" 1 # [ ! -w $EBOOK_DEST_DIR ] && exit_msg "Impossible d'écrire dans le répertoire de destination ($EBOOK_DEST_DIR)" 1 } list_directories() { download_directories=$(mktemp) find "$ebook_download_dir" -type d > $download_directories } directory_is_ebook() { if $(ls -1 "$1" | grep -q '\.mp3$'); then return 0 else return 1 fi } its_new_ebook() { ebook_name_uncleaned="${1##*/}" ebook_name="${ebook_name_uncleaned%% \[*}" messenger "nom du livre : $ebook_name" if [[ -f "${ebook_dest_dir}/${ebook_name}.zip" ]]; then return 1 else return 0 fi } proceed_ebook() { cd "$1" $sudoing zip -r "${ebook_dest_dir}/${ebook_name}.zip" . new_ebook=1 cd - } owncloud_scan() { [[ $new_ebook = 1 ]] && $sudoing $occ_bin files:scan --all; } messenger() { [[ $mode_verbose = 1 ]] && echo "$1"; } # Reception de signaux d'interruptions trap 'exit 1' INT TERM #---------------------------------------------------------------------------------------------------- # Gestion des options #---------------------------------------------------------------------------------------------------- while getopts ":-:hVDv" OPTION; do case $OPTION in h) print_script_help; exit;; V) print_script_name_version; exit;; D) set -x;; v) mode_verbose=1;; :) ;; -) case $OPTARG in help) print_script_help; exit;; version) print_script_name_version; exit;; debug) set -x;; esac ;; *) ;; esac done shift $((OPTIND-1)) #---------------------------------------------------------------------------------------------------- # Début du script #---------------------------------------------------------------------------------------------------- prerunning_test # Liste tout les répertoires du $ebook_download_dir dans le fichier temporaire $download_directories list_directories # Pour chaque répertoire du $ebook_download_dir while read directory; do # Test si le répertoire contient un fichier mp3 if directory_is_ebook "$directory"; then # Si le répertoire contient un fichier mp3, il est considéré comme un livre messenger "le répertoire ($directory) est un livre" # Test si le livre a déjà été traité if its_new_ebook "$directory"; then # Si le livre n'a pas déjà été traité, il est traité messenger "le répertoire ($directory) doit etre zippé" proceed_ebook "$directory" fi fi done < $download_directories owncloud_scan #---------------------------------------------------------------------------------------------------- # Fin du script #---------------------------------------------------------------------------------------------------- #~ Version changelog #~ v0.1 - Création du script