Il y a quelques temps, un contributeur du Ng avait posé la question du
remplacement de terminaisons de noms de fichiers (du genre : remplacer
*.doc par *.rtf).
Naivement, j'avais proposé un script du genre :
#!/bin/bash
for i in $(ls *.doc)
do mv $i $(echo $i|sed -e s/.doc/.rtf/)
done
et je m'étais fait fort justement reprendre de volée à la raison (entre
autres) que ce script ne marche pas si les noms de fichiers comportent des
espaces. Puis l'un des contributeurs avait proposé un script extrèmement
propre et concis que j'aimerais bien retrouver. Une recherche sur les
archives n'ayant rien donné, quelqu'un peut-il me rappeler comment
réaliser proprement cette tâche ?
quelqu'un peut-il me rappeler comment réaliser proprement cette tâche ?
groups.google.com ?
-- @+ Calimero
lhabert
Jean-Marie Delapierre :
for i in $(ls *.doc) do mv $i $(echo $i|sed -e s/.doc/.rtf/) done
et je m'étais fait fort justement reprendre de volée à la raison (entre autres) que ce script ne marche pas si les noms de fichiers comportent des espaces.
Et des *, et des [, et un « doc » non final (sauf en début de ligne).
Puis l'un des contributeurs avait proposé un script extrèmement propre et concis que j'aimerais bien retrouver. Une recherche sur les archives n'ayant rien donné, quelqu'un peut-il me rappeler comment réaliser proprement cette tâche ?
mv -- "$i" "${i%doc}"rtf
Jean-Marie Delapierre :
for i in $(ls *.doc)
do mv $i $(echo $i|sed -e s/.doc/.rtf/)
done
et je m'étais fait fort justement reprendre de volée à la raison (entre
autres) que ce script ne marche pas si les noms de fichiers comportent des
espaces.
Et des *, et des [, et un « doc » non final (sauf en début de ligne).
Puis l'un des contributeurs avait proposé un script extrèmement propre et
concis que j'aimerais bien retrouver. Une recherche sur les archives
n'ayant rien donné, quelqu'un peut-il me rappeler comment réaliser
proprement cette tâche ?
for i in $(ls *.doc) do mv $i $(echo $i|sed -e s/.doc/.rtf/) done
et je m'étais fait fort justement reprendre de volée à la raison (entre autres) que ce script ne marche pas si les noms de fichiers comportent des espaces.
Et des *, et des [, et un « doc » non final (sauf en début de ligne).
Puis l'un des contributeurs avait proposé un script extrèmement propre et concis que j'aimerais bien retrouver. Une recherche sur les archives n'ayant rien donné, quelqu'un peut-il me rappeler comment réaliser proprement cette tâche ?
mv -- "$i" "${i%doc}"rtf
Jean-Marie Delapierre
Le Sat, 18 Feb 2006 11:35:34 +0000, Luc Habert a écrit :
Jean-Marie Delapierre :
for i in $(ls *.doc) do mv $i $(echo $i|sed -e s/.doc/.rtf/) done
et je m'étais fait fort justement reprendre de volée à la raison (entre autres) que ce script ne marche pas si les noms de fichiers comportent des espaces.
Et des *, et des [, et un « doc » non final (sauf en début de ligne).
Puis l'un des contributeurs avait proposé un script extrèmement propre et concis que j'aimerais bien retrouver. Une recherche sur les archives n'ayant rien donné, quelqu'un peut-il me rappeler comment réaliser proprement cette tâche ?
mv -- "$i" "${i%doc}"rtf
Merci de ta contribution. Cependant, cela ne règle pas le problème des noms de fichiers contenant des espaces.
Cordialement.
Jean-Marie
Le Sat, 18 Feb 2006 11:35:34 +0000, Luc Habert a écrit :
Jean-Marie Delapierre :
for i in $(ls *.doc)
do mv $i $(echo $i|sed -e s/.doc/.rtf/)
done
et je m'étais fait fort justement reprendre de volée à la raison (entre
autres) que ce script ne marche pas si les noms de fichiers comportent des
espaces.
Et des *, et des [, et un « doc » non final (sauf en début de ligne).
Puis l'un des contributeurs avait proposé un script extrèmement propre et
concis que j'aimerais bien retrouver. Une recherche sur les archives
n'ayant rien donné, quelqu'un peut-il me rappeler comment réaliser
proprement cette tâche ?
mv -- "$i" "${i%doc}"rtf
Merci de ta contribution.
Cependant, cela ne règle pas le problème des noms de fichiers contenant
des espaces.
Le Sat, 18 Feb 2006 11:35:34 +0000, Luc Habert a écrit :
Jean-Marie Delapierre :
for i in $(ls *.doc) do mv $i $(echo $i|sed -e s/.doc/.rtf/) done
et je m'étais fait fort justement reprendre de volée à la raison (entre autres) que ce script ne marche pas si les noms de fichiers comportent des espaces.
Et des *, et des [, et un « doc » non final (sauf en début de ligne).
Puis l'un des contributeurs avait proposé un script extrèmement propre et concis que j'aimerais bien retrouver. Une recherche sur les archives n'ayant rien donné, quelqu'un peut-il me rappeler comment réaliser proprement cette tâche ?
mv -- "$i" "${i%doc}"rtf
Merci de ta contribution. Cependant, cela ne règle pas le problème des noms de fichiers contenant des espaces.
Cordialement.
Jean-Marie
Jean-Marie Delapierre
Le Sat, 18 Feb 2006 12:34:41 +0100, Calimero a écrit :
Jean-Marie Delapierre wrote:
quelqu'un peut-il me rappeler comment réaliser proprement cette tâche ?
groups.google.com ?
????
Quand j'ai écrit qu'une recherche sur les archives n'avait rien donné, cela voulait dire sur groups.google.com.
Cordialement.
Jean-Marie
Le Sat, 18 Feb 2006 12:34:41 +0100, Calimero a écrit :
Jean-Marie Delapierre wrote:
quelqu'un peut-il me rappeler comment
réaliser proprement cette tâche ?
groups.google.com ?
????
Quand j'ai écrit qu'une recherche sur les archives n'avait rien donné,
cela voulait dire sur groups.google.com.
Merci de ta contribution. Cependant, cela ne règle pas le problème des noms de fichiers contenant des espaces.
Bein si.
Matthieu Moy
Jean-Marie Delapierre writes:
Jean-Marie Delapierre :
for i in $(ls *.doc) ^^^^^^^^^^^
Useless use of ls !
Quand to shell execute ça, la première chose qu'il fait, c'est d'expanser le « * », et de le transformer par exemple en "fichier1.doc" "fichier2.doc" "fichier avec espace.doc". C'est à dire que ton shell fait juste ce qu'il faut.
Après, il execute ls, qui transforme ça en "fichier1.doc fichier2.doc fichier avec espace.doc "
(note : avec $(echo *.doc), tu aurais le même résultat. La commande "ls" ne fait quasiment rien ici).
et après, il fait l'interpretation des blancs, donc il découpe ça en
fichier1.doc fichier2.doc fichier avec espace.doc
et passe dans la boucle for pour chacun.
La version correcte est simplement
for i in *.doc
Cependant, cela ne règle pas le problème des noms de fichiers contenant des espaces.
Ca merdait à deux endroits, Luc n'en a corrigé qu'un ;-).
Au passage, pour renomer une série de fichiers, il y a "rename" qui est fourni en général avec perl :
rename 's/.doc$/.rtf/' *.doc
-- Matthieu
Jean-Marie Delapierre <jean-marie.delapierre@wanadoo.fr> writes:
Jean-Marie Delapierre :
for i in $(ls *.doc)
^^^^^^^^^^^
Useless use of ls !
Quand to shell execute ça, la première chose qu'il fait, c'est
d'expanser le « * », et de le transformer par exemple en
"fichier1.doc" "fichier2.doc" "fichier avec espace.doc". C'est à dire
que ton shell fait juste ce qu'il faut.
Après, il execute ls, qui transforme ça en
"fichier1.doc
fichier2.doc
fichier avec espace.doc
"
(note : avec $(echo *.doc), tu aurais le même résultat. La commande
"ls" ne fait quasiment rien ici).
et après, il fait l'interpretation des blancs, donc il découpe ça en
fichier1.doc
fichier2.doc
fichier
avec
espace.doc
et passe dans la boucle for pour chacun.
La version correcte est simplement
for i in *.doc
Cependant, cela ne règle pas le problème des noms de fichiers contenant
des espaces.
Ca merdait à deux endroits, Luc n'en a corrigé qu'un ;-).
Au passage, pour renomer une série de fichiers, il y a "rename" qui
est fourni en général avec perl :
Quand to shell execute ça, la première chose qu'il fait, c'est d'expanser le « * », et de le transformer par exemple en "fichier1.doc" "fichier2.doc" "fichier avec espace.doc". C'est à dire que ton shell fait juste ce qu'il faut.
Après, il execute ls, qui transforme ça en "fichier1.doc fichier2.doc fichier avec espace.doc "
(note : avec $(echo *.doc), tu aurais le même résultat. La commande "ls" ne fait quasiment rien ici).
et après, il fait l'interpretation des blancs, donc il découpe ça en
fichier1.doc fichier2.doc fichier avec espace.doc
et passe dans la boucle for pour chacun.
La version correcte est simplement
for i in *.doc
Cependant, cela ne règle pas le problème des noms de fichiers contenant des espaces.
Ca merdait à deux endroits, Luc n'en a corrigé qu'un ;-).
Au passage, pour renomer une série de fichiers, il y a "rename" qui est fourni en général avec perl :
rename 's/.doc$/.rtf/' *.doc
-- Matthieu
lhabert
Matthieu Moy :
Ca merdait à deux endroits, Luc n'en a corrigé qu'un ;-).
Ah oui, j'avais survolé le for, j'imaginais pas qu'il soit possible de mettre autre chose que « *.doc » à cet endroit là...
Matthieu Moy :
Ca merdait à deux endroits, Luc n'en a corrigé qu'un ;-).
Ah oui, j'avais survolé le for, j'imaginais pas qu'il soit possible de
mettre autre chose que « *.doc » à cet endroit là...