OVH Cloud OVH Cloud

convertir des espaces en _ underscore

15 réponses
Avatar
Bigdeaper
J'aimerais automatiser la conversion des espaces en underscore dans mes
noms de fichier d'un repertoire donne :

quelqu'un aurait-il un script pour automatiser cela : tout ce que
j'essaie ne marche pas justement a cause des espaces au milieu du nom de
fichier !!!

Merci
B.



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

5 réponses

1 2
Avatar
Yves Rutschle
On Wed, Jul 21, 2004 at 09:53:47PM +0200, Astar0th wrote:
>(Ça marche d'ailleurs aussi sur les répertoires, mais ça
>s'emmèle un peu les pinceaux pour les fichiers qui sont dans
>un répertoire qui a changé de nom... Donc on doit pouvoir
>faire mieux.)

find . -name '* *' -exec rename "s/ /_/g" {} ;
?



Hmm, ça ne semble pas marcher mieux:
:~/tmp$ find
.
./blah blah
./hello world
./hello world/bleh bleh

:~/tmp$ find . -name '* *' -exec rename "s/ /_/g"
{} ;
find: ./hello world: No such file or directory
:~/tmp$ find
.
./hello_world
./hello_world/bleh bleh
./blah_blah


(Ça marche jusqu'à ce que ça déplace un répertoire...)

Y.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Yves Rutschle
On Wed, Jul 21, 2004 at 10:06:17PM +0000, Younes Zouhair wrote:
#!/bin/bash
# blank-rename.sh
#
# Substitutes underscores for blanks in all the filenames in a directory.

ONE=1 # For getting singular/plural right (see below).
number=0 # Keeps track of how many files actually renamed.
FOUND=0 # Successful return value.

for filename in * #Traverse all files in directory.
do
echo "$filename" | grep -q " " # Check whether filename
if [ $? -eq $FOUND ] #+ contains space(s).
then
fname=$filename # Strip off path.
n=`echo $fname | sed -e "s/ /_/g"` # Substitute underscore for blank.
mv "$fname" "$n" # Do the actual renaming.
let "number += 1"
fi
done

if [ "$number" -eq "$ONE" ] # For correct grammar.
then
echo "$number file renamed."
else
echo "$number files renamed."
fi

exit 0



Félicitation, c'est une façon très longue de dire:

rename "s/ /_/g" *

Ça ne résoud pas le problème des sous-répertoires.

Y.


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Charles Plessy
On Thu, Jul 22, 2004 at 02:37:30AM +0100, Yves Rutschle wrote :

Ça ne résoud pas le problème des sous-répertoires.



À mon avis, il faut un truc récursif du genre :

Boucle :
si (Répertoires)
alors pour chaque (Répertoires)
cd répertoire
Boucle
sinon rename_tout_dans_le_répertoire
return

--
Charles


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Bigdeaper
Merci de toutes vos réponses, mais (retour à la case départ !):


259 [] ~/perso/tmp %: find . -name '* *' -exec rename "s/
/_/g" {} ;
260 [] ~/perso/tmp %: find .
.
./tmp2
./tmp2/bla bla
./bouh bouh
./ca ca
261 [] ~/perso/tmp %: find . -print0 | xargs -0 rename "s/ /_/"
262 [] ~/perso/tmp %: find .
.
./tmp2
./tmp2/bla bla
./bouh bouh
./ca ca



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Yves Rutschle
On Thu, Jul 22, 2004 at 11:02:27AM +0200, Bigdeaper wrote:
261 [] ~/perso/tmp %: find . -print0 | xargs -0 rename "s/ /_/"
262 [] ~/perso/tmp %: find .
.
./tmp2
./tmp2/bla bla
./bouh bouh
./ca ca



Heu... "ça marche chez moi"(tm):

[]:tmp$ find
.
./tmp2
./tmp2/bla bla
./bouh bouh
./ca ca
[]:tmp$ find . -print0 | xargs -0 rename "s/ /_/"
[]:tmp$ find
.
./tmp2
./tmp2/bla_bla
./ca_ca
./bouh_bouh

Tu dois avoir qqch de louche dans ton environement?

Y. - qui croyait que l'info, c'était deterministique


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
1 2