for et les noms avec des espaces blancs....
Le
Dominique MICOLLET
Bonjour
Soit un répertoire contenant un paquet de fichiers dont les noms contiennent
des espaces.
Je souhaire faire une opération répétitive sur ces fichiers, en bash (1).
Lorsque je fais la commande à la main et que j'utilise la completion
automatique, bash échappe automatiquement les blancs en les préfixant par
\.
___$ mv aa-> aa->.ccc
est automatiquement traduit en :
___$ mv aaaa\ bbb aaaa\ bbb.ccc
et le fichier 'aaaa bbb' est bien renommé 'aaaa bbb.ccc'
J'essaie d'automatiser la chose pour tous les fichiers avec :
___$ for nom in *; do mv ${nom} ${nom}.ccc ; done
qui ne fonctionne pas parce que les blancs ne sont pas échappés.
J'ai essayé d'insérer des \" et des \' en des endroits stratégiques, sans
succès.
Quelqu'un aurait-il une suggestion à me faire ?
Cordialement.
(1) : pour être précis, il s'agit d'un ensemble de photographies dont je
dois faire un montage pour réaliser un trombinoscope.
--
Dominique MICOLLET
Adresse email : enlever deux francs
Soit un répertoire contenant un paquet de fichiers dont les noms contiennent
des espaces.
Je souhaire faire une opération répétitive sur ces fichiers, en bash (1).
Lorsque je fais la commande à la main et que j'utilise la completion
automatique, bash échappe automatiquement les blancs en les préfixant par
\.
___$ mv aa-> aa->.ccc
est automatiquement traduit en :
___$ mv aaaa\ bbb aaaa\ bbb.ccc
et le fichier 'aaaa bbb' est bien renommé 'aaaa bbb.ccc'
J'essaie d'automatiser la chose pour tous les fichiers avec :
___$ for nom in *; do mv ${nom} ${nom}.ccc ; done
qui ne fonctionne pas parce que les blancs ne sont pas échappés.
J'ai essayé d'insérer des \" et des \' en des endroits stratégiques, sans
succès.
Quelqu'un aurait-il une suggestion à me faire ?
Cordialement.
(1) : pour être précis, il s'agit d'un ensemble de photographies dont je
dois faire un montage pour réaliser un trombinoscope.
--
Dominique MICOLLET
Adresse email : enlever deux francs

Poser une question


Il y a plusieurs solutions, la page suivante donne des explications
détaillées :
http://www.cyberciti.biz/tips/handl...-bash.html
--
DW
....Un problème avec des noms à espace
En fouillant sur internet, j'ai trouvé la solution
___$ IFS=$'n'
Ça marche mais, maintenant, il faut que je comprenne ce que représente $'n'
(IFS, je sais :-)
Cordialement.
--
Dominique MICOLLET
Adresse email : enlever deux francs
$'n', c'est 'new line' : ton script fonctionnera donc s'il n'est pas
inclu dans un nom de fichier...
for file in `find . -maxdepth 1 -type f `
do
File_Orig=${file}
File_Dest=`echo "${File_Orig}" | sed -e 's/ */_/g'`
ln "${File_Orig}" "${File_Dest}"
done
remplace n'importe quel nombre d'espace par un "_"
--
je suis assez têtu et utilise toujours Linux en root et en voulant effacer
tous les fichiers dans un repertoire j'ai fait un rm -fr * or en tapant sur
entree je me suis rendu compte que je suis sur / : oooooooups
-+- T in Guide du linuxien pervers : "Et paf le tétu" -+-
Bonjour,
set -- *
for i; do echo mv "$i" "$i.ccc"; done
les " sont importants
for sans do implique for i in "$@", soit tous les arguments positionnels
ces derniers étant positionnées via set -- * qui se débrouille trè s bien
avec les noms de fichier comprenant des espaces.
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
En tant que vieux dinosaure barbu programmant depuis une éternité en C,
j'avais reconnu le 'new line'. C'est le $ que je ne comprends pas (je n'ai
non plus lu le fameux manuel).
De plus, j'ai un peu de mal à comprendre le fonctionnement d'IFS. Tel qu'il
est forcé ici, l'espace n'est plus un séparateur : comment bash sépare-t'il
ses arguments ?
Visiblement, il y arrive mais il y a une subtilité qui m'échappe.
--
Dominique MICOLLET
Adresse email : enlever deux francs