Précédent   Forum des professionnels en informatique > Systèmes > Linux > Distributions > Debian
Debian Vos questions sur la distribution Debian
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/12/2011, 08h55   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 49
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mars 2007
Messages : 49
Points : 13
Points : 13
Par défaut [Bash] problème de script s'il est lancé avec cron

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 :
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
muaddibx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 09h24   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

La crontab est exécutée sans environnement, donc c'est à toi de définir un environnement dans ton script, soit en sourçant ton ".bashrc' soit en définissant tes variables en début de script ($PATH notamment).

Ensuite plutôt que des pipes et commandes inutiles, pour extraire tes chemins et noms de fichiers :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ A='/home/toto/A110914'
 
$ echo ${A%/*}
/home/toto
 
$ dirname ${A}
/home/toto
 
$ echo ${A##*/}
A110914
 
$ basename ${A}
A110914
 
$
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/12/2011, 10h57   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 49
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mars 2007
Messages : 49
Points : 13
Points : 13
Impeccable, tes informations vont bien m'aider^^

J'vais aller paufiner tout ca, et j'vous laisserais des nouvelles ensuite.

Merci beaucoup pour ces conseils, et bonne journée

EDIT: après modification des 2 lignes qui séparent le nom du directory (avec basename et dirname), le script marche au poil!

Un grand merci à toi, zipe31, t'assures un max =)

Sinon, pour ta remarque à propos de "sourcer" mon script, je vais essayer de me renseigner, ca m'a l'air intéressant^^
muaddibx est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h04.


 
 
 
 
Partenaires

Hébergement Web