#!/bin/bash #------------------------------------------------------------------------------------------------------------------ # Script : expl_transfert_files.sh # Auteur : Doug Le Tough # Date : 22-07-2017 # Version : 1.0.0 # Objet : Permet le transfert de répertoires entre VM # #------------------------------------------------------------------------------------------------------------------ # Mise a jour : # # 1.0.0 22/07/2017 - Doug Le Tough - Cre : Mise en production # #------------------------------------------------------------------------------------------------------------------ # Dependances : Aucune # # #------------------------------------------------------------------------------------------------------------------ # Liste des options et arguments: # # @OPT: o:src_host:src_host:1/1:::: # @OPT: o:dst_host:dst_host:1/1:::: # @OPT: o:src_dir:src_dir:1/1:::: # @OPT: o:dst_dir:dst_dir:1/1:::: # @OPT: f:recursive:recursive:1/1:false::: # @OPT: f:create:create:1/1:false::: # #------------------------------------------------------------------------------------------------------------------ # Liste des erreurs: # # 2 | erreur | stop | ${ERROR} # #------------------------------------------------------------------------------------------------------------------ ## ## Syntaxe : ## -------- ## ## prompt> expl_transfert_files.sh -src_host -dst_host -src_dir -dst_dir ## ## ex: expl_transfert_files.sh -src_host marian -dst_host jimmy -src_dir /etc/httpd -dst_dir /home/doug [-recursive true] [-create true] ## ## Prérequis: ## ---------- ## - Le script doit être executé par l'utilisateur asr sur sousetsuken ## ## Fonctionnement: ## --------------- ## Récupère sur sousetsuken depuis src_host le contenu du répertoire src_dir et le copie dans le répertoire dst_dir ## sur dst_host ## ## Si l'option facultative -recursive est positionnée à true, la récupération sera récursive. ## Par défaut cette option vaut false. ## ## Si l'option facultative -create est positionnée à true, le répertoire de destination sera créé. ## Par défaut cette option vaut false. ## ## Si le répertoire de destination n'existe pas et l'option -create ne vaut pas true, le script remontera une erreur. ## ## ##----------------------------------------------------------------------------------------------------------------- #------------------------------------------------------------------------------------------------------------------ # Initialisation de l'environement #------------------------------------------------------------------------------------------------------------------ if [ "${USER}" != "asr" ]; then ERROR="Seul l'utilisateur asr peut utiliser ce script" echo -e "\033[91m${ERROR}\033[0m" exit 1 fi source /etc/profile.d/tetalab.sh if [ ! -f ${NC_EXPL_CFG}/init.conf ]; then echo "Le fichier d'initialisation du socle \${NC_EXPL_CFG}/init.conf n'éxiste pas !" echo "Arrêt du script par sécurité" exit 250 fi source ${NC_EXPL_CFG}/init.conf ################################################################################## # # Main # ################################################################################## # controle de l'utilisateur if [ ! ${USER} == "asr" ]; then rouge "Seul l'utilisateur asr peut utiliser ce script" exit 1 fi # Controle du nombre d'arguments if [ ! $# -eq 2 ]; then usage exit 1 fi # Controle de la validité des arguments if [ ! $(expr index $1 ':/') -gt 0 ] || [ ! $(expr index $2 ':/') -gt 0 ]; then rouge "Erreur dans les arguments." usage exit 1 fi SOURCE_HOST=$(echo $1 | cut -d: -f1) DEST_HOST=$(echo $2 | cut -d: -f1) SOURCE_PATH=$(echo $1 | cut -d: -f2) DEST_PATH=$(echo $2 | cut -d: -f2) # Génère une chaine aléatoire RND=$(dd if=/dev/urandom bs=3 count=40 2>/dev/null | md5sum | cut -d' ' -f1) # Le nom de l'archive contenant les documents à récupérer ARCHIVE_NAME=${RND}.tgz jaune "Récupération sur ${SOURCE_HOST} de ${SOURCE_PATH} et copie vers ${DEST_HOST} vers ${DEST_PATH}:" jaune "Création de l'archive distante ${TETALABTMP}/${ARCHIVE_NAME}" ssh ${SOURCE_HOST} "sudo tar -cvzf ${TETALABTMP}/${ARCHIVE_NAME} ${SOURCE_PATH}" if [ ! $? -eq 0 ]; then rouge "Erreur lors de la création de l'archive ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} à partir de ${SOURCE_PATH}" delete_archive exit 1 fi jaune "Modification des droits et permissions sur l'archive ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME}:" ssh ${SOURCE_HOST} "sudo chown -v asr: ${TETALABTMP}/${ARCHIVE_NAME}" if [ ! $? -eq 0 ]; then rouge "Erreur lors de la modification des droits et permissions sur l'archive $SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME}" delete_archive exit 1 fi jaune "Rappatriement de l'archive distante ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} sur $(hostname)" scp ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} ${TETALABTMP}/${ARCHIVE_NAME} if [ ! $? -eq 0 ]; then rouge "Erreur lors du rappatriement de l'archive ${SOURCE_HOST}:${TETALABTMP}/${ARCHIVE_NAME} dans $(hostname):${TETALABTMP}/${ARCHIVE_NAME}" delete_archive exit 1 fi jaune "Copie de l'archive locale ${TETALABTMP}/${ARCHIVE_NAME} vers ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}" scp ${TETALABTMP}/${ARCHIVE_NAME} ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME} if [ ! $? -eq 0 ]; then rouge "Erreur lors de la copie de l'archive locale ${TETALABTMP}/${ARCHIVE_NAME} vers ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}" delete_archive exit 1 fi jaune "Extraction du contenu de l'archive ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME} dans ${DEST_HOST}:${DEST_PATH}" ssh ${DEST_HOST} "sudo tar -C ${DEST_PATH} -xvzf ${TETALABTMP}/${ARCHIVE_NAME}" if [ ! $? -eq 0 ]; then rouge "Erreur lors de la copie de la décompression de l'archive ${DEST_HOST}:${TETALABTMP}/${ARCHIVE_NAME}" delete_archive exit 1 fi delete_archive vert "Ok" exit 0