[shell script] boucle for qui ne marche pas

boucle for qui ne marche pas [shell script] - Shell/Batch - Programmation

Marsh Posté le 22-11-2005 à 11:18:26    

Salut,
 
 
je suis en train d ecrire un shell script sous linux qui permet en gros de creer des repertoire en fonction du nom de chaque fichier contenu dans un repertoire.
 
Le probleme, c'est que le nom de ces fichiers peut contenir des espaces.
 
Ainsi, quand je fais la chose suivante :
 

Code :
  1. for fichier in `/bin/ls -1 $chemin*$name*`
  2. do
  3.      echo $fichier
  4. done


 
il me liste bien les fichiers un par un si le fichier ne contient pas d'espace, mais s'il y a un ou plusieurs espaces, il boucle en fait à chaque fois qu'il rencontre un espace.
 
Exemple de résultat :
 


mv "/mnt/020_BE/Software/FMR/rsn/RP40215.doc" "/mnt/020_BE/Software/FMR/rsn/P40215-C"
mv "/mnt/020_BE/Software/FMR/rsn/P80050" "/mnt/020_BE/Software/FMR/rsn/P80050 - A - BOUTON FINGER 4-2 GRAVE"
mv "-" "/mnt/020_BE/Software/FMR/rsn/P80050 - A - BOUTON FINGER 4-2 GRAVE"
mv "A" "/mnt/020_BE/Software/FMR/rsn/P80050 - A - BOUTON FINGER 4-2 GRAVE"
mv "-" "/mnt/020_BE/Software/FMR/rsn/P80050 - A - BOUTON FINGER 4-2 GRAVE"
mv "BOUTON" "/mnt/020_BE/Software/FMR/rsn/P80050 - A - BOUTON FINGER 4-2 GRAVE"
mv "FINGER" "/mnt/020_BE/Software/FMR/rsn/P80050 - A - BOUTON FINGER 4-2 GRAVE"
mv "4-2" "/mnt/020_BE/Software/FMR/rsn/P80050 - A - BOUTON FINGER 4-2 GRAVE"
mv "GRAVE.dwg" "/mnt/020_BE/Software/FMR/rsn/P80050 - A - BOUTON FINGER 4-2 GRAVE"
mv "/mnt/020_BE/Software/FMR/rsn/RP80050.doc" "/mnt/020_BE/Software/FMR/rsn/P80050 - A - BOUTON FINGER 4-2 GRAVE"
mv "/mnt/020_BE/Software/FMR/rsn/P80053-B_BOUTON" "/mnt/020_BE/Software/FMR/rsn/P80053-B_BOUTON CLAVIER IBE 1402 GRAVE LASER"
mv "CLAVIER" "/mnt/020_BE/Software/FMR/rsn/P80053-B_BOUTON CLAVIER IBE 1402 GRAVE LASER"
mv "IBE" "/mnt/020_BE/Software/FMR/rsn/P80053-B_BOUTON CLAVIER IBE 1402 GRAVE LASER"
mv "1402" "/mnt/020_BE/Software/FMR/rsn/P80053-B_BOUTON CLAVIER IBE 1402 GRAVE LASER"
mv "GRAVE" "/mnt/020_BE/Software/FMR/rsn/P80053-B_BOUTON CLAVIER IBE 1402 GRAVE LASER"
mv "LASER.dwg" "/mnt/020_BE/Software/FMR/rsn/P80053-B_BOUTON CLAVIER IBE 1402 GRAVE LASER"
mv "/mnt/020_BE/Software/FMR/rsn/RP80053.doc" "/mnt/020_BE/Software/FMR/rsn/P80053-B_BOUTON CLAVIER IBE 1402 GRAVE LASER"
mv "/mnt/020_BE/Software/FMR/rsn/P80348-1&2-A_gravure" "/mnt/020_BE/Software/FMR/rsn/P80348-1&2-A_gravure bouton laser"
mv "bouton" "/mnt/020_BE/Software/FMR/rsn/P80348-1&2-A_gravure bouton laser"
mv "laser.dwg" "/mnt/020_BE/Software/FMR/rsn/P80348-1&2-A_gravure bouton laser"
mv "/mnt/020_BE/Software/FMR/rsn/RP80348-1&2.doc" "/mnt/020_BE/Software/FMR/rsn/P80348-1&2-A_gravure bouton laser"
 


 
Y a-t-il possibilité de définir une règle différente pour la boucle for, afin qu'il ne considère pas les espaces comme séparateur ?
 
 
merci d'avance :)
 
 
(désolé si ca vous parait évident, je débute en shell script).

Reply

Marsh Posté le 22-11-2005 à 11:18:26   

Reply

Marsh Posté le 22-11-2005 à 11:24:52    

modifie l'IFS :  

Code :
  1. IFS=$'\t\n'


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 22-11-2005 à 11:26:59    

:jap:  
 
 
ca fonctionne parfaitement.
 
 
Mais dois-je restaurer l'original après ? et si oui, comment ?
 
 
Merci en tout cas.

Reply

Marsh Posté le 22-11-2005 à 20:50:32    

Une autre solution (mais c'est dur à dire vu que tu ne nous dit pas exactement ce que tu dois faire dans la boucle), c'est de ne pas utiliser ls et de boucler directement sur * :

for i in *; do echo "$i"; done

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed