Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

bash et espaces dans les noms de fichiers

11 réponses
Avatar
Bruno
Bonjour à tous,

Je fais parfois des petits scripts utilitaires pour effectuer des travaux
trop longs à faire à la main...

Mais quand il s'agit de manipuler des fichiers dont les noms comprennent
des espaces, ça coince. Par exemple :

for file in *.mp3
do mp3gain -r $file
done

... ne marche pas car $file ne contient pas le nom complet du fichier, mais
seulement le début jusqu'au premier espace. Le fichier est donc
inaccessible pour le processus invoqué...

Vous allez me dire qu'il serait préférable de remplacer les espaces par
des sous-lignes (_), mais il faudrait que j'écrive un script pour faire ça
sur tous mes fichiers. ;-)
Bon, je l'ai envisagé mais c'est le plan B.

Pour le plan A, je préférerais une autre solution si vous en avez une à
me proposer...

Merci.

10 réponses

1 2
Avatar
Sebastien Doucet
On 2007-04-14, Bruno wrote:

Bonjour à tous,

Je fais parfois des petits scripts utilitaires pour effectuer des travaux
trop longs à faire à la main...

Mais quand il s'agit de manipuler des fichiers dont les noms comprennent
des espaces, ça coince. Par exemple :

for file in *.mp3
do mp3gain -r $file
done

... ne marche pas car $file ne contient pas le nom complet du fichier, mais
seulement le début jusqu'au premier espace. Le fichier est donc
inaccessible pour le processus invoqué...

Vous allez me dire qu'il serait préférable de remplacer les espaces par
des sous-lignes (_), mais il faudrait que j'écrive un script pour faire ça
sur tous mes fichiers. ;-)
Bon, je l'ai envisagé mais c'est le plan B.

Pour le plan A, je préférerais une autre solution si vous en avez une à
me proposer...

Merci.


salut


test avec
do mp3gain -r "$file"

ça devrait marcher

seb

Avatar
Nicolas George
Bruno wrote in message <46211ed7$0$27411$:
for file in *.mp3
do mp3gain -r $file
done

... ne marche pas car $file ne contient pas le nom complet du fichier, mais
seulement le début jusqu'au premier espace. Le fichier est donc
inaccessible pour le processus invoqué...


Comme on te l'a dit, il faudrait écrire "$file", et c'est vrai partout, sauf
si tu sais exactement ce que tu fais.

Vous allez me dire qu'il serait préférable de remplacer les espaces par
des sous-lignes (_)


Ce serait préférable de toutes façons.

Avatar
Bruno
Sebastien Doucet wrote:

salut


Salut.


test avec
do mp3gain -r "$file"

ça devrait marcher

seb


Non, malheureusement, le résultat est le même.

Pour un fichier style : "Nom avec des espaces.mp3", le script sort :
can't open Nom
can't open avec
can't open des
can't open espaces.mp3


Et si je saisis dans la console : mp3gain Nom
puis que je presse [tab], j'obtiens : mp3gain Nom avec des espaces.mp3


Des espaces dans les noms des fichiers, c'est pas bô...

Avatar
Luc.Habert.00__arjf
Bruno :

Pour un fichier style : "Nom avec des espaces.mp3", le script sort :
can't open Nom
can't open avec
can't open des
can't open espaces.mp3


Euh, ça serait pas ton programme « mp3gain » qui serait lui aussi un script
qui oublie de quoter?

Avatar
Bruno
Luc Habert wrote:


Euh, ça serait pas ton programme « mp3gain » qui serait lui aussi un
script qui oublie de quoter?


Non, non. Quel que soit le programme invoqué de cette façon, le problème
est le même. C'est le bash, apparemment, qui n'aime pas les espaces dans
les noms...

Mais de toutes façons :
Les espaces dans les noms de fichiers, c'est pas bô.

Je sais pas pourquoi, mais c'est comme ça. Pourtant, ce n'est qu'un
caractère comme un autre... Les raisons du problème sont peut-être
historiques...

Voilà un sujet de digression intéressant.

Avatar
Nicolas George
Bruno wrote in message <46212ee9$0$27407$:
Non, non. Quel que soit le programme invoqué de cette façon, le problème
est le même. C'est le bash, apparemment, qui n'aime pas les espaces dans
les noms...


C'est faux. Le problème est de ton côté.

Avatar
Stéphan Peccini

Sebastien Doucet wrote:


test avec
do mp3gain -r "$file"

ça devrait marcher

seb


Non, malheureusement, le résultat est le même.


Et pourtant :

En bourne shell

sh-3.1$ for i in *; do cat $i; done
cat: Essai: Aucun fichier ou répertoire de ce type
cat: de: Aucun fichier ou répertoire de ce type
cat: fichier: Aucun fichier ou répertoire de ce type

sh-3.1$ for i in *; do cat "$i"; done
sh-3.1$

et en bash

[ Essai]$ for i in *; do cat $i; done
cat: Essai: Aucun fichier ou répertoire de ce type
cat: de: Aucun fichier ou répertoire de ce type
cat: fichier: Aucun fichier ou répertoire de ce type

[ Essai]$ for i in *; do cat "$i"; done
[ Essai]$

[ Essai]$ ls -l
total 0
-rw-rw-r-- 1 spc spc 0 avr 14 21:58 Essai de fichier
-rw-rw-r-- 1 spc spc 0 avr 14 21:58 toto

--
Stéphan Peccini
<URL:http://photonature.fr>


Avatar
Bruno
Nicolas George wrote:

C'est le bash, apparemment, qui n'aime pas les espaces
dans les noms...


C'est faux. Le problème est de ton côté.


C'est résolvable alors, bonne nouvelle.

Comment expliques-tu que sous batch, le fichier "Nom avec des espaces.mp3"
soit : "Nom avec des espaces.mp3" ?

Un problème de config ?


Avatar
Bruno
Désolé de vous avoir pris la tête, vous aviez raison.
Ça marche.

Je ne sais pas ce qui s'est passé, j'ai dû merder quelque part lors de
l'essai...

Toutes mes plus plates excuses.

Je m'en vais changer de pseudo, de nom, de tête...

Et merci de votre patience.
Avatar
Th.A.C


Comment expliques-tu que sous batch, le fichier "Nom avec des espaces.mp3"
soit : "Nom avec des espaces.mp3" ?

Un problème de config ?


Heu, c'est tout a fait normal.
Le shell bash (quand on appuye sur TAB) affiche un nom de fichier entier
et fait précéder chaque caractère pouvant être interprété autrement par
un . Comme le shell ne vérifie pas si tu as tapé des guillemets ou des
apostrophes, il met systématiquement les .
Ca peut permettre par exemple d'utiliser des noms de fichiers contenant
les caractères spéciaux comme * ? / (et les autres).

Pour éviter les problèmes avec ces caractères spéciaux, il vaut mieux
utiliser l'apostrophe, le guillemet n'empêche pas le shell bash
d'interpréter certains caractères dans une chaine:
http://abs.traduc.org/abs-4.2.01-fr/ch05.html

il faudrait quand même vérifier si le programme mp3gain prend bien les
noms avec des espaces comme un seul argument s'il y a des guillemets ou
des apostrophes en tapant la commande 'à la mimine':
mp3gain 'nom de fichier.mp3'
ou
mp3gain "nom de fichier.mp3"

1 2