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:
Un petit exemple concret, on part de:
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;
/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
Partager