mon sh marche... jusqu'à ce qu'il rencontre un caractère spécial dans $i
Au lieu d'écrire $i, tu peux (et souvent dois) écrire "$i".
Mais ça ne suffit pas toujours.
À ce niveau, si.
Par exemple:
ls .
.. mon fichier
for a in `ls mon*`;do mv "$a" "$a~";done mv: ne peut évaluer `mon': No such file or directory
mv: ne peut évaluer `fichier': No such file or directory
Comment faire dans ce cas?
C'est parce qu'il ne faut jamais utiliser ls pour ce genre de choses. De plus, ton ls mon* va lister à l'intérieur des répertoires dont le nom commence par "mon", ce qui n'est certainement pas ce que tu veux.
for a in mon*;do mv "$a" "$a~";done
devrait suffire.
-- Vincent Lefèvre - Web: <http://www.vinc17.org/> - 100% validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International des Jeux Mathématiques et Logiques, TETRHEX, etc. Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Dans l'article <bsplvr$240$1@news-reader5.wanadoo.fr>,
noa <a@a.fr> écrit:
Vincent Lefevre a écrit:
Dans l'article <bsh7qf$c5l$1@news-reader2.wanadoo.fr>,
noa <a@a.fr> écrit:
mon sh marche... jusqu'à ce qu'il rencontre un caractère spécial dans $i
Au lieu d'écrire $i, tu peux (et souvent dois) écrire "$i".
Mais ça ne suffit pas toujours.
À ce niveau, si.
Par exemple:
ls
.
..
mon fichier
for a in `ls mon*`;do mv "$a" "$a~";done
mv: ne peut évaluer `mon\': No such file or directory
mv: ne peut évaluer `fichier': No such file or directory
Comment faire dans ce cas?
C'est parce qu'il ne faut jamais utiliser ls pour ce genre de choses.
De plus, ton ls mon* va lister à l'intérieur des répertoires dont le
nom commence par "mon", ce qui n'est certainement pas ce que tu veux.
for a in mon*;do mv "$a" "$a~";done
devrait suffire.
--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> - 100%
validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International
des Jeux Mathématiques et Logiques, TETRHEX, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA
mon sh marche... jusqu'à ce qu'il rencontre un caractère spécial dans $i
Au lieu d'écrire $i, tu peux (et souvent dois) écrire "$i".
Mais ça ne suffit pas toujours.
À ce niveau, si.
Par exemple:
ls .
.. mon fichier
for a in `ls mon*`;do mv "$a" "$a~";done mv: ne peut évaluer `mon': No such file or directory
mv: ne peut évaluer `fichier': No such file or directory
Comment faire dans ce cas?
C'est parce qu'il ne faut jamais utiliser ls pour ce genre de choses. De plus, ton ls mon* va lister à l'intérieur des répertoires dont le nom commence par "mon", ce qui n'est certainement pas ce que tu veux.
for a in mon*;do mv "$a" "$a~";done
devrait suffire.
-- Vincent Lefèvre - Web: <http://www.vinc17.org/> - 100% validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International des Jeux Mathématiques et Logiques, TETRHEX, etc. Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Etienne PIERRE
noa wrote:
ls
. .. mon fichier
for a in `ls mon*`;do mv "$a" "$a~";done
mv: ne peut évaluer `mon': No such file or directory mv: ne peut évaluer `fichier': No such file or directory
Comment faire dans ce cas?
ls -1 mon* | while read file; do mv "$a" "$a~" done
Parfois, si tu as un ls en couleur, il peut arriver que tu ais un alias avec par exemple "ls='ls --color'", dans ce cas, il faut utiliser ls sans l'alias en le précédent d'un antislash ainsi :
ls -1 mon* | while read file; do mv "$a" "$a~" done
Ceci dit la solution de David LE BOURGEOIS avec un find et un xargs est meilleure, c'était juste pour montrer comment gérer les espaces dans un script shell si tu as plus d'une commande à executer.
Etienne
noa wrote:
ls
.
..
mon fichier
for a in `ls mon*`;do mv "$a" "$a~";done
mv: ne peut évaluer `mon\': No such file or directory
mv: ne peut évaluer `fichier': No such file or directory
Comment faire dans ce cas?
ls -1 mon* | while read file; do
mv "$a" "$a~"
done
Parfois, si tu as un ls en couleur, il peut arriver que tu ais un alias
avec par exemple "ls='ls --color'", dans ce cas, il faut utiliser ls
sans l'alias en le précédent d'un antislash ainsi :
ls -1 mon* | while read file; do
mv "$a" "$a~"
done
Ceci dit la solution de David LE BOURGEOIS avec un find et un xargs est
meilleure, c'était juste pour montrer comment gérer les espaces dans un
script shell si tu as plus d'une commande à executer.
mv: ne peut évaluer `mon': No such file or directory mv: ne peut évaluer `fichier': No such file or directory
Comment faire dans ce cas?
ls -1 mon* | while read file; do mv "$a" "$a~" done
Parfois, si tu as un ls en couleur, il peut arriver que tu ais un alias avec par exemple "ls='ls --color'", dans ce cas, il faut utiliser ls sans l'alias en le précédent d'un antislash ainsi :
ls -1 mon* | while read file; do mv "$a" "$a~" done
Ceci dit la solution de David LE BOURGEOIS avec un find et un xargs est meilleure, c'était juste pour montrer comment gérer les espaces dans un script shell si tu as plus d'une commande à executer.
Etienne
Vincent Lefevre
Dans l'article <bt66hv$q34$, Etienne PIERRE écrit:
Parfois, si tu as un ls en couleur, il peut arriver que tu ais un alias avec par exemple "ls='ls --color'", dans ce cas, il faut utiliser ls sans l'alias en le précédent d'un antislash ainsi :
ls -1 mon* | while read file; do mv "$a" "$a~" done
De toute façon, utiliser ls pour cela, c'est petit joueur. Je conseillerais plutôt une solution en lançant une requête à KDE ou je ne sais quoi... :)
Ceci dit la solution de David LE BOURGEOIS avec un find et un xargs est meilleure, c'était juste pour montrer comment gérer les espaces dans un script shell si tu as plus d'une commande à executer.
... mais si tu veux venir à une solution raisonnable, n'utiliser que les possibilités du shell (à part mv) est une solution encore meilleure.
-- Vincent Lefèvre - Web: <http://www.vinc17.org/> - 100% validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International des Jeux Mathématiques et Logiques, TETRHEX, etc. Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Dans l'article <bt66hv$q34$1@biggoron.nerim.net>,
Etienne PIERRE <etienne.pierre.NOSPAM@tuxfamily.org.remove> écrit:
Parfois, si tu as un ls en couleur, il peut arriver que tu ais un alias
avec par exemple "ls='ls --color'", dans ce cas, il faut utiliser ls
sans l'alias en le précédent d'un antislash ainsi :
ls -1 mon* | while read file; do
mv "$a" "$a~"
done
De toute façon, utiliser ls pour cela, c'est petit joueur. Je
conseillerais plutôt une solution en lançant une requête à KDE
ou je ne sais quoi... :)
Ceci dit la solution de David LE BOURGEOIS avec un find et un xargs est
meilleure, c'était juste pour montrer comment gérer les espaces dans un
script shell si tu as plus d'une commande à executer.
... mais si tu veux venir à une solution raisonnable, n'utiliser
que les possibilités du shell (à part mv) est une solution encore
meilleure.
--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/> - 100%
validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International
des Jeux Mathématiques et Logiques, TETRHEX, etc.
Work: CR INRIA - computer arithmetic / SPACES project at LORIA
Dans l'article <bt66hv$q34$, Etienne PIERRE écrit:
Parfois, si tu as un ls en couleur, il peut arriver que tu ais un alias avec par exemple "ls='ls --color'", dans ce cas, il faut utiliser ls sans l'alias en le précédent d'un antislash ainsi :
ls -1 mon* | while read file; do mv "$a" "$a~" done
De toute façon, utiliser ls pour cela, c'est petit joueur. Je conseillerais plutôt une solution en lançant une requête à KDE ou je ne sais quoi... :)
Ceci dit la solution de David LE BOURGEOIS avec un find et un xargs est meilleure, c'était juste pour montrer comment gérer les espaces dans un script shell si tu as plus d'une commande à executer.
... mais si tu veux venir à une solution raisonnable, n'utiliser que les possibilités du shell (à part mv) est une solution encore meilleure.
-- Vincent Lefèvre - Web: <http://www.vinc17.org/> - 100% validated (X)HTML - Acorn Risc PC, Yellow Pig 17, Championnat International des Jeux Mathématiques et Logiques, TETRHEX, etc. Work: CR INRIA - computer arithmetic / SPACES project at LORIA