Re: convertir des espaces en _ underscore

2004-07-22 Par sujet Bigdeaper

Merci de toutes vos réponses, mais (retour à la case départ !):


259 [EMAIL PROTECTED] ~/perso/tmp %: find . -name '* *' -exec rename s/ 
/_/g \{\} \;

260 [EMAIL PROTECTED] ~/perso/tmp %: find .
.
./tmp2
./tmp2/bla bla
./bouh bouh
./ca ca
261 [EMAIL PROTECTED] ~/perso/tmp %: find . -print0 | xargs -0 rename s/ /_/
262 [EMAIL PROTECTED] ~/perso/tmp %: find .
.
./tmp2
./tmp2/bla bla
./bouh bouh
./ca ca




Re: convertir des espaces en _ underscore

2004-07-22 Par sujet Yves Rutschle
On Thu, Jul 22, 2004 at 11:02:27AM +0200, Bigdeaper wrote:
 261 [EMAIL PROTECTED] ~/perso/tmp %: find . -print0 | xargs -0 rename s/ /_/
 262 [EMAIL PROTECTED] ~/perso/tmp %: find .
 .
 ./tmp2
 ./tmp2/bla bla
 ./bouh bouh
 ./ca ca

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

[EMAIL PROTECTED]:tmp$ find
.
./tmp2
./tmp2/bla bla
./bouh bouh
./ca ca
[EMAIL PROTECTED]:tmp$ find . -print0 | xargs -0 rename s/ /_/
[EMAIL PROTECTED]: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



convertir des espaces en _ underscore

2004-07-21 Par sujet 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.




Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Charles Plessy
On Wed, Jul 21, 2004 at 03:36:17PM +0200, Bigdeaper wrote :
 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 !!!
 

man rename

rename 's/ /_/' un\ nom\ de\ fichier

man find, man xargs pour automatiser le tout. Attention : nom de
fichier à espaces a vite fait d'être interprété comme plusieurs noms
de fichiers (c'est pour ça qu'il faut lire le man : je ne me souviens
plus des détails).

Enfin,

rename -n

pour ne pas faire de bêtises.

-- 
Charles, à nouveaux sous emacs :)



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Frederic Bothamy
* Charles Plessy [EMAIL PROTECTED] [2004-07-21 22:48] :
 On Wed, Jul 21, 2004 at 03:36:17PM +0200, Bigdeaper wrote :
  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 !!!
  
 
 man rename
 
 rename 's/ /_/' un\ nom\ de\ fichier
 
 man find, man xargs pour automatiser le tout. Attention : nom de
 fichier à espaces a vite fait d'être interprété comme plusieurs noms
 de fichiers (c'est pour ça qu'il faut lire le man : je ne me souviens
 plus des détails).

La doc Info de find propose 2 solutions :
- délimiter les noms des fichiers par '' ainsi :

find ... -exec rename ... '{}';

(trouvé dans Common Tasks/Strange File Names)

- utiliser -print0 (et xargs) :

find ... -print0 | xargs -r -0 rename ...

(trouvé dans Finding Files/Contents).

TMTOWTDI


Fred


-- 
Comment poser les questions de manière intelligente ?
http://www.gnurou.org/documents/smart-questions-fr.html
Comment signaler efficacement un bug ?
http://www.chiark.greenend.org.uk/~sgtatham/bugs-fr.html



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Yves Rutschle
On Wed, Jul 21, 2004 at 03:36:17PM +0200, Bigdeaper wrote:
 J'aimerais automatiser la conversion des espaces en underscore dans mes 
 noms de fichier d'un repertoire donne :

rename fait ça:

rename s/ /_/ *

 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 !!!

En principe, tous les programmes et scripts devraient
marcher correctement avec des noms de fichiers qui
contiennent des espaces... sinon, ce sont des bugs.

Y.



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Bigdeaper
Le probleme vient du fait que tout les fichiers ne sont pas forcement 
dans le meme repertoire, mais je vais essayer de me pencher sur les 
solution du premier embranchement du fil.


Merci a tous.




Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Claude Reveret
Le mercredi 21 Juillet 2004 15:54, Yves Rutschle a écrit :
 On Wed, Jul 21, 2004 at 03:36:17PM +0200, Bigdeaper wrote:
  J'aimerais automatiser la conversion des espaces en underscore dans mes
  noms de fichier d'un repertoire donne :

 rename fait ça:

 rename s/ /_/ *

Très fort, et comment peut-on faire pour que tous les fichiers d'un répertoire 
et de ses sous-répertoires soit renommés ainsi ?

-- 
@+, Claude



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Gatan PERRIER
Le Wed, 21 Jul 2004 17:18:59 +0200
Claude Reveret [EMAIL PROTECTED] a écrit:

 Le mercredi 21 Juillet 2004 15:54, Yves Rutschle a écrit :
  On Wed, Jul 21, 2004 at 03:36:17PM +0200, Bigdeaper wrote:
   J'aimerais automatiser la conversion des espaces en underscore
   dans mes noms de fichier d'un repertoire donne :
 
  rename fait ça:
 
  rename s/ /_/ *
 
 Très fort, et comment peut-on faire pour que tous les fichiers d'un
 répertoire et de ses sous-répertoires soit renommés ainsi ?
 

un truc du genre:


rename s/ /_/ `find chemin_répertoire_racine -type f`



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Yves Rutschle
On Wed, Jul 21, 2004 at 07:49:14PM +0200, Gaëtan PERRIER wrote:
  Très fort, et comment peut-on faire pour que tous les fichiers d'un
  répertoire et de ses sous-répertoires soit renommés ainsi ?

Ah, l'énoncé du sujet disait LES fichiers d'UN répertoire.

 un truc du genre:
 rename s/ /_/ `find chemin_répertoire_racine -type f`

Non, justement car les espaces font croire au shell qu'il
s'agit d'autant de fichiers... Il faut être plus
conservateur:

find . -print0 | xargs -0 rename s/ /_/

(Ç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.)

Y. - find dinner/ -type f | xargs munchlist



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Claude Reveret
Le mercredi 21 Juillet 2004 20:56, Yves Rutschle a écrit :

 find . -print0 | xargs -0 rename s/ /_/
Merci

 (Ç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.)

 Y. - find dinner/ -type f | xargs munchlist

-- 
@+, Claude

Le clergé est une compagnie qui a le privilège exclusif de voler par la
séduction.
-+- Claude-Hadrien Helvetius (1715-1771) -+-



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Astar0th

Yves Rutschle a écrit :

On Wed, Jul 21, 2004 at 07:49:14PM +0200, Gaëtan PERRIER wrote:


Très fort, et comment peut-on faire pour que tous les fichiers d'un
répertoire et de ses sous-répertoires soit renommés ainsi ?



Ah, l'énoncé du sujet disait LES fichiers d'UN répertoire.



un truc du genre:
rename s/ /_/ `find chemin_répertoire_racine -type f`



Non, justement car les espaces font croire au shell qu'il
s'agit d'autant de fichiers... Il faut être plus
conservateur:

find . -print0 | xargs -0 rename s/ /_/

(Ç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 \{\} \;
?



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Younes Zouhair
#!/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



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet 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:
[EMAIL PROTECTED]:~/tmp$ find
.
./blah blah
./hello world
./hello world/bleh bleh

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


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

Y.



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet Yves Rutschle
On Wed, Jul 21, 2004 at 10:06:17PM +, 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.



Re: convertir des espaces en _ underscore

2004-07-21 Par sujet 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