Ci-dessous, le su-per-be script que j'ai développé pour faire un export $U ! Pour l'import, c'est dollaru_import_v1.07.ksh
#!/bin/ksh
#------------------------------------------------------------------------------------
# TITRE : dollaru_export.ksh
# AUTEUR : MGE
# DATE : 02/10/2008
# PROJET : Migration Recette --> Exploit
# DESCRIPTION : Export $U paramétrable
# PARAMETRES : voir fonction "show_usage".
#------------------------------------------------------------------------------------
# DERNIERE MAJ : V1.07 18/11/2008
# AUTEUR :
# DESCRIPTION 1.03 : Remplacement de -env par "-vd" ou "-variableDir"
# 1.03 : Ajout de "-model"
# 1.03 : Ajout du type de tâche et de l'utilisateur au nom de l'export de la tache
# 1.04 : Permettre la maj du model avant export en model (-updateModel)
# 1.05 : Recherche automatique du dossier $U (pas de maj VERSION; compatible version précédente)
# 1.06 : Ajout de "-extSes" ou "-extendFromSession"
# 1.07 : Correction du cas "$Rul"==""
#------------------------------------------------------------------------------------
commandName=`basename $0`
#------------------------------------------------------------------------------------
# Fonction show_usage
#------------------------------------------------------------------------------------
show_usage()
{
[ "${1}" = "valid" ] || echo "Invalid Parameter : $@"
echo "usage : $commandName \033[1m-output\033[0m the_dest [\033[1moptions\033[0m] \033[1mobjects\033[0m [\033[1m-h\033[0m]"
echo
echo " \033[1m-output\033[0m the_dest : the_dest peut être un répertoire ou une archive (.tar ou .tar.gz)"
echo " \033[1moptions\033[0m :"
echo " \033[1m-variableDir\033[0m dir : partie du chemin, dans les ressources, à rendre variable (doit correspondre au nom complet d'un sous-répertoire, entre //)"
echo " \033[1m-vd\033[0m dir : idem -variableDir the_dir"
echo " \033[1m-extendFromSession\033[0m : ajoute à la liste des choses à exporter toutes les uprocs, ressources et tâches dont dépendent les sessions à exporter"
echo " \033[1m-extSes\033[0m : idem -extendFromSession"
echo " \033[1m-model\033[0m : exporte les tâches "Modèle" (sinon, exporte les non-modèle)"
echo " \033[1m-updateModel\033[0m : met à jour les tâches Modèle avec la non-modèle, implique -model"
echo " \033[1mobjects\033[0m (tous supportent les caractères génériques, par exemple \"APP_*\") :"
echo " \033[1m-uproc\033[0m \"a b c\" : liste des Uprocs à exporter"
echo " \033[1m-session\033[0m \"a b c\" : liste des sessions à exporter"
echo " \033[1m-task\033[0m \"a b c\" : liste des tâches à exporter"
echo " \033[1m-ress\033[0m \"a b c\" : liste des ressources à exporter"
echo " \033[1m-any\033[0m \"a b c\" : ajoute cette liste à celles des Uprocs, sessions, taches, and ressources à exporter"
echo " \033[1m-h\033[0m : affiche cette aide"
echo
echo "exemple : $commandName -output "'/tmp/dollaru_export_APP-$(date +"%y%m%d-%H%M%S").tar.gz'" -vd REC -any \"APP_*\""
exit 127
}
#------------------------------------------------------------------------------------
# Declarations des variables
#------------------------------------------------------------------------------------
set -A aUprocList
set -A aSessionList
set -A aTaskList
set -A aRessList
taskType=NOMODEL
taskEType=NOMODEL
typeset -l updateModel=false
typeset -l extendFromSession=false
#------------------------------------------------------------------------------------
# Lecture du paramètre
#------------------------------------------------------------------------------------
while [ $# -gt 0 ]; do
typeset -l param="$1"
case "$param" in
-output) FinalExportName=$2;
[[ "$2" = "" ]] && show_usage -output;
shift;;
-variabledir|-vd) CurrentEnvPath=$2;
[[ "$2" = "" ]] && show_usage -variableDir;
shift;;
-uproc) set -A aUprocList ${aUprocList[@]} $2;
[[ "$2" = "" ]] && show_usage;
shift;;
-session) set -A aSessionList ${aSessionList[@]} $2;
[[ "$2" = "" ]] && show_usage;
shift;;
-task) set -A aTaskList ${aTaskList[@]} $2;
[[ "$2" = "" ]] && show_usage;
shift;;
-ress) set -A aRessList ${aRessList[@]} $2;
[[ "$2" = "" ]] && show_usage;
shift;;
-any) set -A aUprocList ${aUprocList[@]} $2;
set -A aSessionList ${aSessionList[@]} $2;
set -A aTaskList ${aTaskList[@]} $2;
set -A aRessList ${aRessList[@]} $2;
[[ "$2" = "" ]] && show_usage;
shift;;
-model) taskType=MODEL; taskEType=MODEL;;
-updatemodel) updateModel=true; taskType=NOMODEL; taskEType=MODEL;;
-extendfromsession|-extses) extendFromSession=true;;
-h) show_usage valid;;
*)
show_usage $@;;
esac
shift;
done
[[ "$FinalExportName" = "" ]] && show_usage;
#[[ "$CurrentEnvPath" = "" ]] && show_usage;
#------------------------------------------------------------------------------------
# Chargement de l'environnement $U
#------------------------------------------------------------------------------------
UXMGRDIR=`find / -name "uxsetenv" -exec dirname {} \; 2>/dev/null`
echo "Répertoires mgr \$U trouvés :"
echo "$UXMGRDIR"
while [ `echo "$UXMGRDIR" | wc -w` -ne 1 ]; do
printf "Spécifiez le répertoire mgr \$U : ";
read UXMGRDIR
done
cd $UXMGRDIR
. ./uxsetenv
cd - >/dev/null
#------------------------------------------------------------------------------------
# traitement de l'ExportName
#------------------------------------------------------------------------------------
case $FinalExportName in
*.tar.gz) ExportDir=$(dirname $FinalExportName)/$(basename $FinalExportName .tar.gz);;
*.tar) ExportDir=$(dirname $FinalExportName)/$(basename $FinalExportName .tar);;
*) ExportDir=$(dirname $FinalExportName)/$(basename $FinalExportName);;
esac
[[ "$ExportDir" = "" ]] && show_usage;
#------------------------------------------------------------------------------------
# traitement de l'EnvPath
#------------------------------------------------------------------------------------
ExportedEnvPath=E$(echo $CurrentEnvPath | cut -b 2- | tr -c '[:cntrl:]' '[$*]')
[[ "$CurrentEnvPath" = "" ]] && ExportedEnvPath=
typeset -i EnvPathSize=`echo $ExportedEnvPath | wc -c`
[[ `echo $CurrentEnvPath | wc -c` -ne $EnvPathSize ]] && echo "\$CurrentEnvPath doit faire la même taille que $ExportedEnvPath" && exit 127
#------------------------------------------------------------------------------------
# Declarations et validations des variables internes
#------------------------------------------------------------------------------------
Dir_Res=${ExportDir}/res
Dir_Upr=${ExportDir}/upr
Dir_Rul=${ExportDir}/rul
Dir_Ses=${ExportDir}/ses
Dir_Tsk=${ExportDir}/tsk
Dir_Tmp=${ExportDir}/tmp
Lst_Res=${Dir_Tmp}/list-res-$(date +"%y%m%d-%H%M").txt
Lst_Upr=${Dir_Tmp}/list-upr-$(date +"%y%m%d-%H%M").txt
Lst_Rul=${Dir_Tmp}/list-rul-$(date +"%y%m%d-%H%M").txt
Lst_Ses=${Dir_Tmp}/list-ses-$(date +"%y%m%d-%H%M").txt
Lst_Tsk=${Dir_Tmp}/list-tsk-$(date +"%y%m%d-%H%M").txt
FullExport=${ExportDir}.tar
Log=$(dirname $0)/$(basename $ExportDir).log
#------------------------------------------------------------------------------------
# Création du répertoire d'extraction
#------------------------------------------------------------------------------------
#Création et nettoyage des repertoires destination
rm -rf $ExportDir
rm -f $FinalExportName
mkdir -p $Dir_Res $Dir_Upr $Dir_Rul $Dir_Ses $Dir_Tsk $Dir_Tmp
#------------------------------------------------------------------------------------
# Fonction de test des erreurs
#------------------------------------------------------------------------------------
Test_Erreur()
{
if [ ${1} -eq 0 ]
then
cat ${Log}.err >> ${Log} 2>/dev/null
rm -f ${Log}.err
echo "# Traitement ${2} OK" | tee -a ${Log}
echo "#" >> ${Log}
else
cat ${Log}.err 2>/dev/null | tee -a ${Log}
rm -f ${Log}.err
echo "#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "# Erreur lors du traitement ${2} : ${1}" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#" | tee -a ${Log}
echo "#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#" | tee -a ${Log}
exit 1
fi
}
echo "#--------------------------------------------------------------------------" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# Script d'exportation -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# Export total des Sessions Uprocs Taches du plan Batch de recette -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "# -" | tee -a ${Log}
echo "#- Debut ------------------------------------------------------------------" | tee -a ${Log}
#
# Generation des listes definitives des objets a exporter
#
printf > $Lst_Res; printf > $Lst_Upr; printf > $Lst_Ses; printf > $Lst_Tsk; printf > $Lst_Rul
for Prefixe in ${aSessionList[@]}; do
$UXEXE/uxlst SES SES=${Prefixe} | tail +5 | awk '{ print $1 }' >> $Lst_Ses
done
#
# Ajouts extendFromSession
#
if [[ $extendFromSession == true ]]; then
cat $Lst_Ses | while read session; do
set -A aTaskList ${aTaskList[@]} ${session}
$UXEXE/uxshw ses exp SES=$session | grep "| upr :" | cut -d \: -f 2 | while read uproc; do
set -A aUprocList ${aUprocList[@]} ${uproc}
$UXEXE/uxshw upr exp UPR=$uproc | grep "res :" | cut -d \: -f 2 | while read res; do
set -A aRessList ${aRessList[@]} ${res}
done
done
done
fi
for Prefixe in ${aRessList[@]}; do
$UXEXE/uxlst RES RES=${Prefixe} | tail +5 | awk '{ print $1 }' >> $Lst_Res
done
for Prefixe in ${aUprocList[@]}; do
$UXEXE/uxlst UPR UPR=${Prefixe} | tail +5 | awk '{ print $1 }' >> $Lst_Upr
done
for Prefixe in ${aTaskList[@]}; do
$UXEXE/uxlst TSK UPR=${Prefixe} $taskType | tail +5 | sed "s/^ / _ _ /" | awk '{ print $1" "$3 }' >> $Lst_Tsk
$UXEXE/uxshw tsk exp UPR=${Prefixe} mu=* $taskType vupr=* ses=* partage | grep "rule" | cut -b 27-34 | sort | uniq >> $Lst_Rul
$UXEXE/uxlst TSK SES=${Prefixe} UPR=* $taskType | tail +5 | sed "s/^ / _ _ /" | awk '{ print $1" "$3 }' >> $Lst_Tsk
$UXEXE/uxshw tsk exp SES=${Prefixe} UPR=* mu=* $taskType vupr=* ses=* partage | grep "rule" | cut -b 27-34 | sort | uniq >> $Lst_Rul
done
#
# Suppression des doublons
#
sort $Lst_Ses | uniq > $Lst_Ses.tmp && mv $Lst_Ses.tmp $Lst_Ses
sort $Lst_Res | uniq > $Lst_Res.tmp && mv $Lst_Res.tmp $Lst_Res
sort $Lst_Upr | uniq > $Lst_Upr.tmp && mv $Lst_Upr.tmp $Lst_Upr
sort $Lst_Tsk | uniq > $Lst_Tsk.tmp && mv $Lst_Tsk.tmp $Lst_Tsk
sort $Lst_Rul | uniq > $Lst_Rul.tmp && mv $Lst_Rul.tmp $Lst_Rul
#
# Export des objets
#
echo $ExportedEnvPath > ${Dir_Res}/exportedpath.txt
while read Res; do
$UXEXE/uxext RES EXP RES=$Res output=${Dir_Tmp}/$Res.exp.tmp > ${Log}.err 2>&1
Test_Erreur $? "Extraction de la ressource $Res"
cat ${Dir_Tmp}/$Res.exp.tmp | sed "s/\/$CurrentEnvPath\//\/$ExportedEnvPath\//" > ${Dir_Res}/$Res.exp 2>> ${Log}
Test_Erreur $? "Variabilisation de la ressource $Res"
done < $Lst_Res
while read Upr; do
$UXEXE/uxext UPR EXP UPR=$Upr output=${Dir_Upr}/$Upr.exp > ${Log}.err 2>&1
Test_Erreur $? "Extraction de l'Uproc $Upr"
done < $Lst_Upr
while read Rul; do
if [[ "$Rul" != "" ]]; then
$UXEXE/uxext RUL EXP RUL=$Rul output=${Dir_Rul}/$Rul.exp > ${Log}.err 2>&1
Test_Erreur $? "Extraction de la regle $Rul"
fi
done < $Lst_Rul
while read Ses; do
$UXEXE/uxext SES EXP SES=$Ses output=${Dir_Ses}/$Ses.exp > ${Log}.err 2>&1
Test_Erreur $? "Extraction de la session $Ses"
done < $Lst_Ses
while read Tsk; do
Ses=`echo $Tsk | awk '{ print $1 }'`
Upr=`echo $Tsk | awk '{ print $2 }'`
SesFile="$Ses"
SesTsk="SES=${Ses}"
[[ "$Ses" = "_" ]] && SesFile="none" && Ses=" " && SesTsk=""
[[ $updateModel == true ]] &&
{
tskVer=`$UXEXE/uxshw tsk exp SES=\"$Ses\" UPR=$Upr mu=* $taskType vupr=* partage | grep "| vupr" | head -n 1 | cut -d \: -f 2 | cut -d \ -f 2`
$UXEXE/uxdup TSK EXP SES=\"$Ses\" UPR=$Upr MU=* VUPR=$tskVer $taskType TSES=\"$Ses\" TUPR=$Upr TVUPR=$tskVer TMU=\" \" T$taskEType > ${Log}.err 2>&1
Test_Erreur $? "Mise à jour de la tache MODEL $Tsk"
}
tskUser=`$UXEXE/uxshw tsk exp SES=\"$Ses\" UPR=$Upr mu=* $taskEType vupr=* partage | grep "| user" | head -n 1 | cut -d \: -f 2 | cut -d \ -f 2`
$UXEXE/uxext TSK EXP $SesTsk UPR=$Upr $taskEType output=${Dir_Tsk}/${SesFile}-${Upr}-${taskEType}-${tskUser}.exp > ${Log}.err 2>&1
Test_Erreur $? "Extraction de la tache $taskEType $Tsk"
done < $Lst_Tsk
echo $VERSION > ${ExportDir}/version.txt
rm $Dir_Tmp/*
#------------------------------------------------------------------------------------
# traitement de l'ExportName pour eventuels tar & compression
#------------------------------------------------------------------------------------
case $FinalExportName in
*.tar.gz) tar cf $ExportDir.tar -C `dirname $ExportDir` `basename $ExportDir`
Test_Erreur $? "Creation de l'archive $ExportDir.tar"
gzip $ExportDir.tar
Test_Erreur $? "Compression de l'archive $ExportDir.tar.gz"
rm -rf $ExportDir $ExportDir.tar;;
*.tar) tar cf $ExportDir.tar -C `dirname $ExportDir` `basename $ExportDir`
Test_Erreur $? "Creation de l'archive $ExportDir.tar"
rm -rf $ExportDir;;
esac
echo "#- Fin ------------------------------------------------------------------" | tee -a ${Log}