Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/04/2007, à 13:46

linuxnico

script bash transforme les mots et pas la phrase entiere :-(

bonjour,

j'ai fait un script shell pour modifier mes accents dans le nom de mes fichier:

#!/bin/bash
 
for i in $(find ./ *); do
R="`echo "$i" | tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" "aceeeeiioouuACEEEEIIOOUU"`" ;
echo "$i------$R\n";
if [ "$R" != "$i" ] 
then
	mv "$i" "$R"
fi
done

Mais voila, ca marche mais pas completement.

je m'explique, lorsque le fichier s'appelle "xxxxx.xx" c'est bon il transforme les accents mais si il y a des espace dans le com, comme "xxxx yyyy zzzz.ttt" il essaye me transformer chaque mot et donc de me renommer le fichier correspondants au mot (qui n'existe pas...)

mais je ne trouve pas comment faire pour qu'il me transforme tout le texte et pas juste un mot dans le texte.

j'ai sait qu'il existe sed, mais je ne connais pas du tout la syntaxe, et si ca marcherai mieux.

Merci de votre aide


S'il n'y a pas de solution
c'est qu'il n'y a pas de probleme
SCHADOCK

Hors ligne

#2 Le 20/04/2007, à 15:23

qqun

Re : script bash transforme les mots et pas la phrase entiere :-(

Avec sed il suffit d'utiliser :
sed -e s/ç/c/g 
pour remplacer par exemple le ç par c.

sinon pour remplacer les accents des noms de fichier d'un repertoire ,une solution
peut etre de lister les noms des fichiers du repertoire dans un fichier temp et apres
les traiter .

dans cet exemple je change juste les ç,é,è,à,ô par c,e,e,a,o
il suffit de rajouter les autres a la ligne sed pour avoir qqchose de complet.

#!/bin/bash
ls > fic.tmp
cat < fic.tmp | while true
do
        read ligne
        if [ "$ligne" = "" ]; then break; fi
        R=`echo $ligne | sed -e s/ç/c/g -e s/é/e/g -e s/è/e/g -e s/à/a/g -e s/ô/o/g `
        echo $ligne "--->" $R

        if [ "$R" != "$ligne" ] 
        then
            mv "$ligne" "$R"
        fi
done
ls -1
caleçon.fic
écharpe.tst
hôte.ked
le système.nop
mon hôte.ked
système.nop
tmp
tt.sh
un caleçon.fic
une écharpe.tst
 
 ./tt.sh 
caleçon.fic ---> calecon.fic
écharpe.tst ---> echarpe.tst
fic.tmp ---> fic.tmp
hôte.ked ---> hote.ked
le système.nop ---> le systeme.nop
mon hôte.ked ---> mon hote.ked
système.nop ---> systeme.nop
tmp ---> tmp
tt.sh ---> tt.sh
un caleçon.fic ---> un calecon.fic
une écharpe.tst ---> une echarpe.tst
0
 ls -1
calecon.fic
echarpe.tst
fic.tmp
hote.ked
le systeme.nop
mon hote.ked
systeme.nop
tmp
tt.sh
un calecon.fic
une echarpe.tst

#3 Le 01/05/2007, à 20:37

linuxnico

Re : script bash transforme les mots et pas la phrase entiere :-(

bon ca marche merci, mais j'ai encore un pb, c'est que j'ai des sous repertoire et la un ls et un ls -R ne donne pas du tout la meme sortie... :-(

a tu une solution pour ce nouveau probleme?

merci


S'il n'y a pas de solution
c'est qu'il n'y a pas de probleme
SCHADOCK

Hors ligne

#4 Le 02/05/2007, à 11:42

qqun

Re : script bash transforme les mots et pas la phrase entiere :-(

et si tu remplaces simplement

ls > fic.tmp
PAR
find ./ > fic.tmp

cela ne marche pas avec les sous repertoires ?

#5 Le 02/05/2007, à 12:46

linuxnico

Re : script bash transforme les mots et pas la phrase entiere :-(

alors voila ce que j'ai mis dans mon script:

#!/bin/bash
find ./  > liste.txt

#for i in $(cat liste.txt); 
cat < liste.txt | while true

do
read ligne
if [ "$ligne" = "" ]; then break; fi
	
	
	R="`echo "$ligne" | tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" "aceeeeiioouuACEEEEIIOOUU"`" ;
	echo "$ligne"------"$R"\n;
if [ "$R" != "$ligne" ];  then 
	echo mv "$i" "$R"
fi

et voila le resultat:

nico@nico-desktop:~/Desktop/test accent$ ./accent2 
------./n
------./ttn
------./tt/tUeestn
------./accent.sh~n
------./accent.shn
------./lklkl lklkl 545 "Én
------./accentn
------./accent2n
------./liste.txtn
------./accent2~n

avec comme structure de fichier:

nico@nico-desktop:~/Desktop/test accent$ find ./
./
./tt
./tt/tUeest
./accent.sh~
./accent.sh
./lklkl lklkl 545 "É
./accent
./accent2
./liste.txt
./accent2~

donc apparement il ne prends pas le "read ligne"
:-(

Dernière modification par linuxnico (Le 02/05/2007, à 12:48)


S'il n'y a pas de solution
c'est qu'il n'y a pas de probleme
SCHADOCK

Hors ligne

#6 Le 02/05/2007, à 13:48

kaworu

Re : script bash transforme les mots et pas la phrase entiere :-(

linuxnico a écrit :

alors voila ce que j'ai mis dans mon script:

#!/bin/bash
find ./  > liste.txt

#for i in $(cat liste.txt); 
cat < liste.txt | while true

do
read ligne
if [ "$ligne" = "" ]; then break; fi
	
	
	R="`echo "$ligne" | tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" "aceeeeiioouuACEEEEIIOOUU"`" ;
	echo "$ligne"------"$R"\n;
if [ "$R" != "$ligne" ];  then 
	echo mv "$i" "$R"
fi

Salut. Essaye voir comme ça :

#!/bin/bash
find ./  > liste.txt

while read ligne; do
    [ "$ligne" = "" ] && break
    
    R="`echo "$ligne" | tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" "aceeeeiioouuACEEEEIIOOUU"`"
    echo "$ligne"------"$R"\n
    if [ "$R" != "$ligne" ];  then 
        echo mv "$i" "$R"
    fi
done < list.txt

"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne