Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/01/2008, à 16:01

benlaug

[Résolu] Petit problème avec script Bash

Bonjour à  tous,

Je me retrouve confronté à  un problème (classique ?) qui est le suivant :

J'ai un fichier (par exemple nommé file) avec des emplacements de fichiers à  l'intérieur. Par exemple :

/home/benlaug/a
/home/benlaug/b
...

Seulement parfois, certains fichiers ont des espaces dans leur nom :

/home/benlaug/a
/home/benlaug/b
/home/benlaug/abc def/g <== celui-là  par exemple
...

Je voudrais supprimer les fichiers qui sont listés dans file. Donc j'essaye :

rm `cat file`

Evidemment, rm n'aime pas les espaces. Seulement le problème c'est que même quand je transforme :

/home/benlaug/abc def/g

en

/home/benlaug/abc\ def/g

dans le fichier ça ne marche toujours pas (alors que si je le tape manuellement directement : rm /home/benlaug/abc\ def/g ça marche).
Pour la transformation de l'espace en '\ ' j'utilise la commade suivante :

sed -i 's/\ /\\ /g' file

Quelqu'un sait ce qui ne va pas ou ce que je pourrais faire pour effacer les fichiers listés dans mon fichier file ?

Merci

Dernière modification par benlaug (Le 05/01/2008, à 17:12)

Hors ligne

#2 Le 05/01/2008, à 17:05

Bri.

Re : [Résolu] Petit problème avec script Bash

C'est effectivement un classique, et c'est à  mon avis LA tare de bash (et de pas mal de shells)...
En gros, il faut dire au shell de séparer les arguments uniquement aux changements de ligne. Avec bash, c'est la variable IFS qui régit cela.

IFS=$'\n' ; rm `cat file` ; IFS=$' \t\n'

Mais si quelqu'un a une méthode plus jolie, je suis preneur !
Faire joujou avec IFS peut entrainer des comportements bizarres dans les scripts... Pense à  bien remettre la valeur par défaut ( $' \t\n' ).

Tchou!


"Ne me dites pas que ce problème est difficile; s'il n'était pas difficile, ce ne serait pas un problème." [Maréchal Foch dixit]
--
Bri.

Hors ligne

#3 Le 05/01/2008, à 17:11

benlaug

Re : [Résolu] Petit problème avec script Bash

Ca marche impec, merci big_smile

Hors ligne

#4 Le 06/01/2008, à 15:56

Aurel34

Re : [Résolu] Petit problème avec script Bash

tu peux aussi utiliser le classique while read, genre:

cat file | while  read i; do rm "$i"; done

dans ce cas les guillements autour de $i vont "protéger" les espaces dans tes noms de fichiers.

Pour l'IFS c'est une méthode intéressante, mais assez chiante à  l'usage (par exemple c'est une variable qui ne s'exporte pas, il faut alors délimiter des sous-shells avec des parenthèses...).
Mais c'est parfois indispensable...:/