#!/bin/bash # ========================================================================= # Script pour faciliter le dépot de fichier dans les casiers profs. # Respecte la hiérarchie des fichiers copiés # Ne détruit pas une version existante (copie dans casier/old) # Fichier de log (casier/log) pou connaître les derniers dépôts # # MCD : novembre 2005 # # Usage : cf fonction éponyme # # Remarque : # - Vérifie que le casier est correct # # Bug : Ne marche que pour les fichiers issus de /home # # Historique # ---------- # nov 05 : log et old crées si n'existent pas # # ========================================================================= # =============================== # == Quelques constantes == # =============================== # --- Les couleurs --- #CCASIER="\033[37;44;1m" COK="\033[32m" CERREUR="\033[31m" CNEUTRE="\033[0;0m" CFILE="\033[37;1m" CCASIER=$CFILE # ==================================== # == Quelques fonction utiles == # ==================================== function usage() { echo "usage: casier prof [fichier]"; echo "- dépose le fichier (dossier) dans le casier prof"; echo "- si fichier non spécifié, dépose le dossier courant"; exit; } function erreur() { echo -e "${CERREUR}Erreur! ${CNEUTRE}$1"; exit 1; } function ok() { echo -e "${COK}$1${CNEUTRE}"; } function log() { echo "$DATE `whoami` $SRC" >> $LOG; } # --- Copie le fichier en vérifiant que c est valide function copy() { if [[ ! -e /home/$1 ]]; then erreur "n'existe pas"; fi if [[ -e $CASIER/$SRC ]]; then mv $CASIER/$SRC $CASIER/$SRC-$BAK if [[ $? -ne 0 ]]; then erreur "inconnue"; fi (cd $CASIER; cp -r --parents $SRC-$BAK $OLD;) if [[ $? -ne 0 ]]; then erreur "inconnue"; fi rm -rf $CASIER/$SRC-$BAK if [[ $? -ne 0 ]]; then erreur "inconnue"; fi fi #(cd /home; cp -rf --parents --backup=t $SRC $CASIER;) (cd /home; cp -rf --parents $SRC $CASIER;) if [[ $? -ne 0 ]]; then erreur "inconnue"; fi ok "OK"; } # ================== # == Script == # ================== # Tester le nombre de paramètres # ---------------------------------- if [ $# -ne 2 -a $# -ne 1 ]; then usage; exit 1; fi # Assigner les paramètres généraux # ----------------------------------------------------------- PROF=$1 CASIER=/home/$PROF/casier if [[ ! -e $CASIER ]]; then erreur "pas de casier $PROF"; fi # On crée si n'existe pas OLD=$CASIER/old if [[ ! -e $OLD ]]; then mkdir $OLD; chmod 777 $OLD; fi LOG=$CASIER/log if [[ ! -e $LOG ]]; then touch $LOG; chmod 666 $OLD; fi DATE=`date "+%x %T"` BAK=`date "+%s"` # --- Le fichier/dossier à déposer # --- La manière de le présenter à l'utilisateur if [[ $# -eq 1 ]] ; then SRC=$PWD; TXT="dossier courant"; else SRC=$2; TXT="$SRC"; fi # --- Construit la variable SRC # --- SRC = nom complet qualifié du fichier sans /home/ au début if [[ ${SRC:0:1} != "/" ]]; then SRC="$PWD/$SRC"; fi SRC=${SRC:6} # Les copier # -------------- echo -ne "Dépôt " echo -ne "de ${CFILE}$TXT${CNEUTRE} " echo -ne "chez $CCASIER$PROF$CNEUTRE " echo -ne ": " copy $SRC # Pour règler pbl permissions de fichiers et dossiers chmod -R o+rX,g-rwx $CASIER/$USER log $SRC