Bonjour,

Je rencontre un soucis sur un script bash pour retraiter les noms de répertoire/fichier dans une grosse arborescence, afin de virer tout ce qui est accents et caractères spéciaux.

Quand je l'exécute en ligne de commande, tout va bien.

Par contre quand je l'exécute avec cron, ca part en vrille. Apparemment, ca viendrait de mes variables, chargées de séparer le nom du fichier, de celui du directory. Voici les principales lignes du script:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
#!/bin/bash
rootDir="/home/toto"
 
renomeFile() {
   # chemin du dossier parent
  d=`echo "${*}" | sed -e 's/^\(.*\/\)[^\/]*/\1/'`
   # nom du fichier/dossier courant
  f=`echo "${*}" | sed -e 's/^.*\/\([^\/]*\)/\1/'`
   # traitement des accents
  m=`echo "${f}" | unaccent CP850`
   # reassemblage du nom de fichier
  if [ ${f} != ${m} ] ; then
    mv "${*}" "${d}${m}"
  fi
}
 
for i in 1 2 3 4 5 6 7 8 9 10; do
  find -P $rootDir -mindepth $i -maxdepth $i -ctime -4 | while read xDir ; do
    if [ -d "$xDir" ]; then   
      renomeDir $xDir        ## j'ai pas mis cette fonction car elle est quasi similaire à la suivante
    elif [ -f "$xDir" ]; then
      renomeFile $xDir
    fi
  done
done;
Un petit exemple concret, on part de:
/home/toto/A110914 à lulu.txt
et voici les valeurs de chaque variable:
${*}= /home/toto/A110914 à lulu.txt
${d}= /home/toto/à lulu.txt ## normalement, il devrait trouver /home/toto/
${f}= A110914 à lulu.txt
${m}= A110914 a lulu.txt

et donc il arrive à:
/home/toto/à lulu.txtA110914 a lulu.txt

Le script se trompe donc sur la construction du dossier parent, alors qu'il le fait correctement quand je le lance à la mimine...
Pour préciser un peu le contexte, je traite une arborescence sur une partition ext3 (ISO-8859-1) qui est enrichie par des utilisateurs windows, grâce à samba. Les caractères accentués/spéciaux n'apparaissent pas clairement sur linux (ca affiche des trucs bizarres), mais exécuté en ligne de commande, ce script marche nikel...

Si quelqu'un avait une idée, ca serait bien sympa.

Merci d'avance.

Muad'Dib