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

[FIND] Problème avec l'option "-exec"

13 réponses
Avatar
François RONVAUX
Bonjour à tous.


Sous Knoppix v4.0 LiveDVD, j'ai un répertoire "~/Desktop/wav".
Je souhaite trouver dans ce répertoire tous les fichiers ".wav" et les
convertir en MP3 avec l'encodeur LAME. Je fais donc :

$find "~/Desktop/wav" -type f -iregex '.*\.wav' -exec lame [options] '{}' \;


Le souci est que les fichiers produits sont nommés "filename.wav.mp3" et
je préfèrerais évidemment qu'ils soient directement de la forme
"filename.mp3".
Comment faire ?

Enfin, comment envoyer le résultat dans le répertoire "~/Desktop/MP3" ?


Merci d'avance pour vos réponses.



--
Pour une réponse privée, remplacer dans l'adresse e-mail le underscore
par un point

10 réponses

1 2
Avatar
Nicolas George
François RONVAUX wrote in message
<43104f85$0$12778$:
$find "~/Desktop/wav" -type f -iregex '.*.wav' -exec lame [options] '{}' ;


-name '*.wav' est plus standard.

Le souci est que les fichiers produits sont nommés "filename.wav.mp3" et
je préfèrerais évidemment qu'ils soient directement de la forme
"filename.mp3".
Comment faire ?


Directement dans find, rien à faire. L'idée de base serait de remplacer
l'appel à lame par un appel à un script qui calcule le bon nom de fichier
destination. Pour ma part, je ferais ça avec zsh plutôt que find :

cd ~/Desktop/wav
for i in **/*.wav(.)
lame ... $i ${i:r}.mp3

Enfin, comment envoyer le résultat dans le répertoire "~/Desktop/MP3" ?


Avec ma version, il suffit de mettre « ../MP3/ » devant « ${i:r}.mp3 » :
c'est pour ça que j'ai fait un cd au début plutôt que de mettre
~/Desktop/wav dans le motif cherché.

Sinon, tu as une bonne raison de vouloir faire du MP3 plutôt que du Vorbis ?
:-Þ

Avatar
François RONVAUX
Nicolas George wrote:

-name '*.wav' est plus standard.


Ca marche.


Directement dans find, rien à faire. L'idée de base serait de remplacer
l'appel à lame par un appel à un script qui calcule le bon nom de fichier
destination. Pour ma part, je ferais ça avec zsh plutôt que find :


Marche pas :

$zsh
bash: zsh: commad not found

Il semblerait que je dispose seulement de bash.


cd ~/Desktop/wav
for i in **/*.wav(.)
lame ... $i ${i:r}.mp3


Marche pas :

$cd ~/Desktop/wav
$for i in **/*.wav(.) ; do lame ... $i ${i:r}.mp3 ; done
bash: syntax error near unexpected token '('


Si je fais :

$cd ~/Desktop/wav
$for i in *.wav ; do lame [options] $i ${i:r}.mp3 ; done

Les fichiers sont encodés mais les filenames restent en ".wav.mp3".


Sinon, tu as une bonne raison de vouloir faire du MP3 plutôt que du Vorbis ?


Support universel.
Vu la capacité des baladeurs MP3, je peux me permettre des morceaux
encodés au bitrate maximal (320 kb/s) pour atteindre une qualité
équivalente au Vorbis.

Avatar
Nicolas George
François RONVAUX wrote in message
<43106c21$0$18577$:
$zsh
bash: zsh: commad not found

Il semblerait que je dispose seulement de bash.


Toutes mes condoléances.

bash: syntax error near unexpected token '('
<snip>

Les fichiers sont encodés mais les filenames restent en ".wav.mp3".


**, (.) et ${...:r} sont des constructions spécifiques à zsh. Il est plus ou
moins possible de construire des équivalents en bash, mais ça risque d'être
fastidieux.

Avatar
Christophe Gaubert
$cd ~/Desktop/wav
$for i in **/*.wav(.) ; do lame ... $i ${i:r}.mp3 ; done
bash: syntax error near unexpected token '('


En bash :

cd ~/Desktop/wav
for f in *.wav ; do lame [options] "$f" "../MP3/${f%wav}mp3" ; done

(Les guillemets au cas où tes fichiers contiennent des espaces)


--
Christophe Gaubert
http://perso.wanadoo.fr/christophe.gaubert
Mail posté depuis un système libre GNU/Linux

Avatar
drkm
Christophe Gaubert writes:


for i in **/*.wav(.) ; do ...


En bash :

for f in *.wav ; do ...


Et pour les fichiers se trouvant dans des sous-répertoires ?

--drkm


Avatar
Nicolas George
Christophe Gaubert wrote in message
<4310a7a6$0$1702$:
for f in $(find . -name "*.wav") ; do ...

Y a-t-il mieux ?


Mettre IFS à n peut aider, les fichiers musicaux avec des espaces étant
très courants, plus que les fichiers avec des retours à la ligne.

Avatar
Christophe Gaubert
Mettre IFS à n peut aider, les fichiers musicaux avec des espaces étant
très courants, plus que les fichiers avec des retours à la ligne.


Oui, ou bien mettre des guillemets autour de "$(find ...)" .


--
Christophe Gaubert
http://perso.wanadoo.fr/christophe.gaubert
Mail posté depuis un système libre GNU/Linux

Avatar
Nicolas George
Christophe Gaubert wrote in message
<4310ae3d$0$5364$:
Oui, ou bien mettre des guillemets autour de "$(find ...)" .


Non, ça ça ne marche pas s'il y a plus d'un fichier.

Avatar
Jacques L'helgoualc'h
Le 27-08-2005, drkm a écrit :
Christophe Gaubert writes:


for i in **/*.wav(.) ; do ...


En bash :

for f in *.wav ; do ...


Et pour les fichiers se trouvant dans des sous-répertoires ?


find ~/Desktop/wav -type f -name *.wav |
while read file ; do
...
done

(avec des précautions si ces fichiers ont des noms vicieux)
--
Jacques L'helgoualc'h



Avatar
Christophe Gaubert
Christophe Gaubert wrote in message
<4310ae3d$0$5364$:

Oui, ou bien mettre des guillemets autour de "$(find ...)" .



Non, ça ça ne marche pas s'il y a plus d'un fichier.


Euh, oui, exact, l'exemple sur lequel j'avais testé était un mauvais
exemple... D'ailleurs, ça me surprenait un peu que ça fonctionne. Mais
c'est bizarre, j'ai lu ça dans l'ABS me semble-t-il. Je vais vérifier.


--
Christophe Gaubert
http://perso.wanadoo.fr/christophe.gaubert
Mail posté depuis un système libre GNU/Linux


1 2