Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

script renommage fichier avec espace

15 réponses
Avatar
jc06
Bonjour,

Je suis en train de travailler sur la mise au point d'un script pour renomm=
er automatiquement tous mes fichiers venant de windows.

Entre autre, je souhaiterai supprimer tous les espaces situ=E9s dans les no=
ms de fichiers en les remplacant par des undescore par exemple.

J'ai un peu de mal dans le scripting etant un vrai debutant en scripting ba=
sh.
Si vous pouviez me donner un peu d'aide.

Merci.
J.C =20

10 réponses

1 2
Avatar
Nicolas George
jc06 wrote in message :
Entre autre, je souhaiterai supprimer tous les espaces situés dans les
no ms de fichiers en les remplacant par des undescore par exemple.


Avec zsh,

mv $file ${file// /_}

Avec bash... de toutes façons il faut être masochiste pour faire du
script shell avec autre chose que zsh.

Avatar
jc06
O
Avec zsh,

mv $file ${file// /_}

Avec bash... de toutes façons il faut être masochiste pour faire du
script shell avec autre chose que zsh.


Tu as certainement raison.
Mais comme je debute, je prefere partir du basique.
Et puis bash, je le trouve partout sur mes serveurs.

C'est pour cela que je me permets de poser ce genre de question qui parait surement tres trivial pour les utilisateurs linux qui scripte souvent.
En fait pour preciser, mon truc.
Je dois parcourir tout mon repertoire (j'ai fait une boucle for) et modifie r tous les noms de fichiers en supprimant les espaces.
J'ai beaucoup de mal !!

Si vous aviez quelques references pour debuter en bash-scripting je prends.

Merci.
J.C

Avatar
jc06
Merci beaucoup de ton aide.
Je finis ce que je suis en train de faire (autofs)
et je me remets dessus.
Au plus tard je vois ca des demain matin.

Encore merci.
J.C
Avatar
Ronald
Le Mon, 07 Jun 2004 13:48:47 +0200, jc06 a écrit :


Bonjour,

Je suis en train de travailler sur la mise au point d'un script pour
renommer automatiquement tous mes fichiers venant de windows.

Entre autre, je souhaiterai supprimer tous les espaces situés dans les
noms de fichiers en les remplacant par des undescore par exemple.

J'ai un peu de mal dans le scripting etant un vrai debutant en scripting
bash. Si vous pouviez me donner un peu d'aide.

Merci.
J.C


J'ai ça qui peut t'intéresser:

#!/bin/bash
function eradication
{
for file in *_-_*;
do renamed=$(echo $file|sed s/_-_/_/);
mv "$file" $renamed;
done
}
function cherche
{
ls | grep _-_ 1>&2>/dev/null;
}
for file in * *;
do renamed=$(echo $file|sed y/ /_/);
mv "$file" $renamed;
done;
while cherche;
do eradication;
done;
echo "fini";

Avatar
David LE BOURGEOIS
Bonjour,


Bonsoir.


Je suis en train de travailler sur la mise au point d'un script pour renommer automatiquement tous mes fichiers venant de windows.

Entre autre, je souhaiterai supprimer tous les espaces situés dans les noms de fichiers en les remplacant par des undescore par exemple.


find /path -type f -name "* *" -print0 |
perl -n0e '$old = $_; s/ /_/g; rename $old, $_'


J'ai un peu de mal dans le scripting etant un vrai debutant en scripting bash.
Si vous pouviez me donner un peu d'aide.


http://zsh.sunsite.dk/Doc/Release/index-frame.html

Merci.


De rien.

Bonne lecture.

--
David LE BOURGEOIS

Avatar
jc06
Voila je vous remercie beaucoup pour votre aide.
J'ai un truc qui marche a l'essai.

Mon script grace a vos conseils:
--------------------------------------
#!/bin/bash
# ce script s'appelle scriptRenom.sh
set -x

# Renommage des noms de fichiers et repertoires comportant des espaces
# dans le repertoire courant
for i in *
do
ren=`echo $i | sed 's/ /_/g'`
echo "$i"
echo "$ren"
if [ "$i" != "$ren" ]
then mv "$i" $ren
fi
done
-----------------------------------------

Bon ca marche impec.
Surement pas trop optimisé (surement mieux avec * *) mais bon c'et fonc tionnel.
Encore merci.

J.C
Avatar
jc06
Merci beaucoup.
J'ai reussi a faire ce que je voulais.
Grace a votre aide.

Mon script est le suivant :
------------------------------------
for i in *
do
ren=`echo $i | sed 's/ /_/g'`
if [ "$i" != "$ren" ]
then mv "$i" $ren
fi
done
----------------------------------

Surement pas tres otpimise (mieux de faire * *) mais c'est fonctionnel ;)

En fait ce qui me manquait c'etait
for i in *

Je ne connaissais que
for i in `ls`
et ca me coupait les fichiers avec espace en deux variables ;)

Encore merci.
En revanche je connaissais (un peu) deja sed, awk et grep ...

Puisque j'en suis a vous demander des tuyaux.
J'ai un peu de mal a partir d'un fichier comprenant plusieurs champs.
exemple fich1
--------------------------------------------
champ11 champ12 champ13 champ14 champ15 champ16 ......

champ21 champ22 champ23 champ24 champ25 champ26 ......

champ31 champ32 champ33 champ34 champ35 champ36 ......

....... ..... ....... ...... ....... ......

--------------------------------

Comment acceder a chaque champs de maniere individuelle.
Merci de votre aide precieuse.
J.C
Avatar
Le Souricier Gris
Merci beaucoup.
J'ai reussi a faire ce que je voulais.
Grace a votre aide.

Mon script est le suivant :
------------------------------------
for i in *
do
ren=`echo $i | sed 's/ /_/g'`
if [ "$i" != "$ren" ]
then mv "$i" $ren
fi
done
----------------------------------

Surement pas tres otpimise (mieux de faire * *) mais c'est fonctionnel ;)

En fait ce qui me manquait c'etait
for i in *

Je ne connaissais que
for i in `ls`
et ca me coupait les fichiers avec espace en deux variables ;)

Encore merci.
En revanche je connaissais (un peu) deja sed, awk et grep ...

Puisque j'en suis a vous demander des tuyaux.
J'ai un peu de mal a partir d'un fichier comprenant plusieurs champs.
exemple fich1
--------------------------------------------
champ11 champ12 champ13 champ14 champ15 champ16 ......

champ21 champ22 champ23 champ24 champ25 champ26 ......

champ31 champ32 champ33 champ34 champ35 champ36 ......

....... ..... ....... ...... ....... ......

--------------------------------

Comment acceder a chaque champs de maniere individuelle.
Merci de votre aide precieuse.
J.C


Deux solutions


while read ligne
do
set $ligne
echo $1 $2 $3 $4 ...
done < fichier
où $1 $2 $3 sont les champs

ou

cat fichier | awk '{ print $1 ... $n }'

--
_@°> Eric BERTHOMIER / Le Sourcier Gris
http://lesouriciergris.free.fr http://troll.west.free.fr

Avatar
TiChou
Dans le message <news:ca4hq0$k7q$,
*Le Souricier Gris* tapota sur f.c.o.l.configuration :

cat fichier | awk '{ print $1 ... $n }'


UUOC. :( -1 ;)

--
TiChou

Avatar
Hugolino
Le Mon, 7 Jun 2004 15:03:37 +0200, jc06 a écrit:
Si vous aviez quelques references pour debuter en bash-scripting je prends.


Je viens de trouver:
Scripts sous Linux
Shell Bash, Sed, Awk, Perl, Tcl, Tk, Pithon, Ruby
auteur: Christophe Blaess
Editeur: Eyrolles
Prix: 45 ¤

C.Blaess a longtemps été le traducteur des pages de manuel de Linux.

Je n'ai pas encore utiliser beaucoup le bouquin, mais de prime abord il
a l'air top.

JE pense qu'il doit être possible de trouver le sommaire au format pdf
sur eyrolles.com

Mes 2¢

--
"Attention ! Si vous annulez l'annulation alors que le commencement n'est pas
fini et que la fin n'a pas encore commencé, la désinstallation terminale ne
sera pas terminée quand tout sera désinstallé" ? je traduis en dialecte
shadokien, c'est un peu plus clair que les messages d'erreurs M$. -+- MA -+-

1 2