Ci-dessous, le su-per-be script que j'ai développé pour faire un import $U ! Pour l'export, c'est dollaru_export_v1.07.ksh

{{ExtractCode|dollaru_import_v1.07.ksh}}
#!/bin/ksh
#------------------------------------------------------------------------------------
# TITRE                : dollaru_import.ksh
# AUTEUR               : MGE
# DATE                 : 02/10/2008
# PROJET               : Migration Recette --> Exploit
# DESCRIPTION          : Import $U complet ou partiel
#                      : les données importées dépendent du contenu de l'ImportDir
# PARAMETRES           : voir fonction "show_usage".
#------------------------------------------------------------------------------------
# DERNIERE MAJ         : V1.07 18/11/2008
VERSION=1.04
# AUTEUR               :
# DESCRIPTION     1.03 : Remplacement de -env par "-vd" ou "-variableDir"
#                 1.03 : Utilisation du type et user dans le nom de l'export de tache
#                 1.03 : Ajout de "-tu X=Y" ou "-translateUser X=Y"
#                 1.04 : Permettre l'export en model pour import en model + distribution en normal (-distributeModel)
#                 1.05 : Recherche automatique du dossier $U (pas de maj VERSION; compatible version précédente)
#                 1.06 : Suivi versionning export (pas de maj VERSION; compatible version précédente)
#                 1.07 : -distributeModel n'implique plus -enableTasks
#------------------------------------------------------------------------------------
commandName=`basename $0`
 
#------------------------------------------------------------------------------------
# Fonction show_usage
#------------------------------------------------------------------------------------
show_usage()
{
  [ "${1}" = "valid" ] || echo "Invalid Parameter : $@"
 
  echo "usage : $commandName \033[1m-input\033[0m the_input [\033[1moptions\033[0m] [\033[1m-h\033[0m]"
  echo
  echo "  \033[1m-input\033[0m the_input : the_dest peut être un répertoire ou une archive (.tar ou .tar.gz)"
  echo "  \033[1moptions\033[0m :"
  echo "    \033[1m-translateUser\033[0m userA=userB : utiliser userB à la place de userA comme compte de lancement pour les tâches"
  echo "    \033[1m-tu\033[0m userA=userB  : voir -translateUser userA=userB"
  echo "    \033[1m-variableDir\033[0m dir : dir doit avoir la même longueur que lors de l'export (un controle est effectué). Permet de convertir un chemin de ressource en un autre"
  echo "    \033[1m-vd\033[0m dir          : idem -variableDir the_dir"
  echo "    \033[1m-distributeModel\033[0m : duplique les tâches modeles en non-modèle dans la MU choisie"
  echo "    \033[1m-disableTasks\033[0m    : désactive les tâches juste après leur import"
  echo "    \033[1m-enableTasks\033[0m     : active les tâches juste après leur import [surcharge -disableTasks]"
  echo "    \033[1m-mu xxx\033[0m          : Managment Unit (Unité de Gestion); par défaut, mu=hostname"
  echo "  \033[1m-h\033[0m                 : affiche cette aide"
 
  exit 127
}
 
#------------------------------------------------------------------------------------
# Declarations des variables
#------------------------------------------------------------------------------------
set -A aUserTr
typeset -l Distribute=false
 
#------------------------------------------------------------------------------------
# Lecture du paramètre
#------------------------------------------------------------------------------------
MU=`hostname`
 
while [ $# -gt 0 ]; do
  typeset -l param="$1"
  case "$param" in
    -tu|-translateuser)
      set -A aUserTr ${aUserTr[@]} $2;
      [[ "$2" = "" ]] && show_usage -user;
      echo "$2" | grep "=" >/dev/null || show_usage -user;
      shift;;
    -input) ImportDir=$2;
      [[ "$2" = "" ]] && show_usage -input;
      shift;;
    -vd|-variabledir)
      ImportedEnvPath=$2;
      [[ "$2" = "" ]] && show_usage -variableDir;
      shift;;
    -disabletasks) disableTasks=true;;
    -enabletasks) enableTasks=true;;
    -mu) MU=$2;
      [[ "$2" = "" ]] && show_usage -mu;
      shift;;
    -distributemodel) Distribute=true;;
    -h) show_usage valid;;
    *)
       show_usage $@;;
  esac
  shift;
done
 
[[ "$ImportDir" == "" ]] && 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
 
 
#------------------------------------------------------------------------------------
# Fonction de test des erreurs
#------------------------------------------------------------------------------------
Test_Erreur()
{
  if [ ${1} -eq 0 ]
 
        then
		cat ${Log}.err >> ${Log}
                echo "# Traitement ${2} OK" | tee -a ${Log}
                echo "#" >> ${Log}
        else
  		cat ${Log}.err | tee -a ${Log}
                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
}
 
Log=$(dirname $0)/$(basename $0 .ksh).$(date +"%y%m%d-%H%M").log
echo > ${Log}.err
 
#------------------------------------------------------------------------------------
# Extraction au besoin de .tar[.gz]
#------------------------------------------------------------------------------------
 
case $ImportDir in
    *.tar.gz) cd `dirname $ImportDir`
              gunzip -c $ImportDir | tar xf - ; RC=$?
              cd - >/dev/null
              Test_Erreur $RC "Extraction de $ImportDir"
              ImportDir=`dirname $ImportDir`/`basename $ImportDir .tar.gz`;;
    *.tar) cd `dirname $ImportDir`
           tar xf $ImportDir; RC=$?
           cd - >/dev/null
           Test_Erreur $RC "Extraction de $ImportDir"
           ImportDir=`dirname $ImportDir`/`basename $ImportDir .tar`;;
esac
 
ls -d $ImportDir/. > /dev/null 2>${Log}.err
Test_Erreur $? "Acces a $ImportDir"
 
cat $ImportDir/version.txt | read expversion > /dev/null 2>${Log}.err
Test_Erreur $? "Acces a la version"
[[ "$VERSION" == "$expversion" ]]; Test_Erreur $? "Compatibilité de la version"
 
#------------------------------------------------------------------------------------
# Declarations des variables internes
#------------------------------------------------------------------------------------
 
Dir_Res=${ImportDir}/res
Dir_Upr=${ImportDir}/upr
Dir_Rul=${ImportDir}/rul
Dir_Ses=${ImportDir}/ses
Dir_Tsk=${ImportDir}/tsk
Dir_Tmp=${ImportDir}/tmp
 
Log=$(dirname $0)/$(basename $0 .ksh).$(date +"%y%m%d-%H%M").log
 
#------------------------------------------------------------------------------------
# Validation de l'EnvPath
#------------------------------------------------------------------------------------
read ExportedEnvPath < ${Dir_Res}/exportedpath.txt
Test_Erreur $? "Acces a ${Dir_Res}/exportedpath.txt"
 
typeset -i EnvPathSize=`echo $ExportedEnvPath | wc -c`
typeset -i EnvPathSizeD=$EnvPathSize-1
[[ $EnvPathSize -eq 0 ]] && EnvPathSizeD=0
 
[[ `echo $ImportedEnvPath | wc -c` -eq $EnvPathSize ]]; Test_Erreur $? "-variableDir parameter must be $EnvPathSizeD characters long"
 
 
echo "#--------------------------------------------------------------------------" | tee -a ${Log}
echo "#                                                                         -" | tee -a ${Log}
echo "#                                                                         -" | tee -a ${Log}
echo "#                           Script d'exportation                          -" | tee -a ${Log}
echo "#                                                                         -" | tee -a ${Log}
echo "# Import 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}
 
#------------------------------------------------------------------------------------
# Devariabilisation et validation des ressources avant import
#------------------------------------------------------------------------------------
 
find ${Dir_Res} -name "*.exp" | while read ResFile; do
  Res=`basename $ResFile .exp`
  cat ${Dir_Res}/$Res.exp | sed "s/\/$ExportedEnvPath\//\/$ImportedEnvPath\//" > ${Dir_Tmp}/$Res.exp.tmp 2>${Log}.err
  Test_Erreur $? "Devariabilisation de la ressource $Res"
 
  ResLine=$(head -2 ${Dir_Tmp}/$Res.exp.tmp | tail -1)
  ResPath=$(echo "$ResLine" | cut -b 182-243)
  ResEnd=$(echo "$ResLine" | cut -b 244-244)
 
  [[ "$ResEnd" = "_" ]] || Test_Erreur $? "fichier ressource resultant Invalide : ${Dir_Tmp}/$Res.exp.tmp"
  ls -d $ResPath/. > /dev/null 2>${Log}.err
  Test_Erreur $? "Acces a $ResPath"
done
 
find ${Dir_Res} -name "*.exp" | while read ResFile; do
  Res=`basename $ResFile .exp`
  $UXEXE/uxins RES EXP RES=$Res input=${Dir_Tmp}/$Res.exp.tmp REPL > ${Log}.err 2>&1
  Test_Erreur $? "Insertion de la ressource $Res (fichier ${Dir_Tmp}/$Res.exp.tmp)"
done
 
find ${Dir_Upr} -name "*.exp" | while read UprFile; do
  Upr=`basename $UprFile .exp`
  $UXEXE/uxins UPR EXP UPR=$Upr input=${Dir_Upr}/$Upr.exp REPL > ${Log}.err 2>&1
  Test_Erreur $? "Insertion de l'Uproc $Upr"
done
 
find ${Dir_Rul} -name "*.exp" | while read RulFile; do
  Rul=`basename $RulFile .exp`
  $UXEXE/uxins RUL EXP RUL=$Rul input=${Dir_Rul}/$Rul.exp REPL > ${Log}.err 2>&1
  Test_Erreur $? "Insertion de la regle $Rul"
done
 
find ${Dir_Ses} -name "*.exp" | while read SesFile; do
  Ses=`basename $SesFile .exp`
  $UXEXE/uxins SES EXP SES=$Ses input=${Dir_Ses}/$Ses.exp REPL > ${Log}.err 2>&1
  Test_Erreur $? "Insertion de la session $Ses"
done
 
find ${Dir_Tsk} -name "*.exp" | while read TskFile; do
  Tsk=`basename $TskFile .exp`
  Ses=`echo $Tsk | cut -d - -f 1`
  Upr=`echo $Tsk | cut -d - -f 2`
  tskType=`echo $Tsk | cut -d - -f 3`
  tskUser=`echo $Tsk | cut -d - -f 4-`
  SesFile="$Ses"
  SesTsk="SES=${Ses}"
  [[ "$Ses" = "none" ]] && SesFile="none" && Ses=" " && SesTsk=""
 
  cible=$MU
  [[ "$tskType" == "MODEL" ]] && cible="*"
 
  $UXEXE/uxins TSK EXP $SesTsk UPR=$Upr $tskType input=${Dir_Tsk}/$SesFile-$Upr-${tskType}-${tskUser}.exp CIBLE=$cible REPL > ${Log}.err 2>&1
  Test_Erreur $? "Extraction de la tache $Tsk"
  if [[ "$disableTasks" == "true" ]]; then
    $UXEXE/uxupd TSK EXP SES=\"$Ses\" UPR=$Upr $tskType vupr=* mu=$cible TECHINF HOLD > ${Log}.err 2>&1
    Test_Erreur $? "Mise à jour du status de la tache $tskType $Tsk (disable)"
  fi
 
  #Lecture et Traduction du user de la tâche
  if [[ "$tskUser" != "" ]]; then
    for trUser in ${aUserTr[@]}; do
      trUserA=${trUser%%=*}
      trUserB=${trUser##*=}
      if [[ "${tskUser##$trUserA}" == "" ]]; then
        #la partie trUserA correspond
        tskUser=$trUserB
        break;
      fi
    done
    $UXEXE/uxupd TSK EXP SES=\"$Ses\" UPR=$Upr $tskType vupr=* mu=$cible TECHINF USER=$tskUser > ${Log}.err 2>&1
    Test_Erreur $? "Mise à jour du status de la tache $tskType $Tsk (user = $tskUser)"
 
    [[ $Distribute == true ]] && [[ $tskType == "MODEL" ]] &&
    {
      tskVer=`$UXEXE/uxshw tsk exp SES=\"$Ses\" UPR=$Upr mu=$cible $tskType vupr=* partage | grep "| vupr" | head -n 1 | cut -d \: -f 2 | cut -d \  -f 2`
      $UXEXE/uxdup TSK EXP SES=\"$Ses\" UPR=$Upr mu=$cible VUPR=$tskVer MODEL TSES=\"$Ses\" TUPR=$Upr TVUPR=$tskVer TMU=$MU TNOMODEL > ${Log}.err 2>&1
      Test_Erreur $? "Distribution de la tache {$Tsk} en NOMODEL"
      tskType=NOMODEL
    }
 
  fi
 
  if [[ "$enableTasks" == "true" ]]; then
    $UXEXE/uxupd TSK EXP SES=\"$Ses\" UPR=$Upr $tskType vupr=* mu=$MU TECHINF NOHOLD > ${Log}.err 2>&1
    Test_Erreur $? "Mise à jour du status de la tache $tskType $Tsk (enable)"
  fi
done
 
echo "Full LogFile = ${Log}"
echo "#- Fin ------------------------------------------------------------------" | tee -a ${Log}