vendredi 3 février 2012

Unix / Linux : faire une liste simple de répertoire

Parfois, lorsque l'on dispose de nombreuses instances de programme, et qu'on souhaite automatiser des choses, sur des arborescence similaire , mais légèrement différentes (comme des nombreuses install tomcat)

il est utile de faire une boucle en shell. Un moyen simple, et la commande "ls" couplé a "cut" pour récupérer la partie variable de l'instance.

Par exemple, j'ai 3 instances tomcats :

/Metier/tomcat1/conf/server.xml
/Metier/tomcat2/conf/server.xml
/Metier/tomcat3/conf/server.xml
/Metier/UnAutreTomcat1/conf/server.xml
/Metier/ UnSecondTomcat1 /conf/server.xml

Je veux récupérer tous les fichiers server.xml de mes instances tomcat (et pas les 2 dernières), pour les gérer en conf.

Ce qui nous donne :

TOMCATS=`ls /MIDDLE/tomcat* | grep SSL-cnav2 | cut -d'/' -f 1`

for unTomcat in $TOMCATS ; do
  mkdir -p $DEST/$ unTomcat   
  cp -v /MIDDLE/cnav/$ unTomcat /tomcat1/conf/* $DEST/$unTomcat
done





Unix / Linux : trouver facilement un binaire/fichier

Dans des scripts bash, il est regulièrement nécessaire de spécifier des chemins. Une technique simple, peut être d'utiliser la commande "locate", et si elle ne trouve rien, on peut tenter une chemin par défaut. Voici, des exemples simples qui utilise les options -e pour "exist" et -r pour chercher la regex.

Pour trouver java :
bash3.02:$/usr/bin/locate -e -r "bin/java$"

Pour trouver mysqldump, et préciser un chemin par défaut dans le cas contraire :
...
# Check presence MySQL MysqlDump=`/usr/bin/locate -e -r "mysqldump$"` 
if [ $? -ne 0 ]; then 
   echo 1 "mysqldump command not found" 
else 
   Mysql="/usr/local/mysql/bin/mysql" 
fi