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

Le
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
  • Partager ce contenu :
Vos réponses Page 1 / 2
Trier par : date / pertinence
Nicolas George
Le #617655
François RONVAUX wrote in message
$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 ?
:-Þ

François RONVAUX
Le #617652
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.

Nicolas George
Le #617651
François RONVAUX wrote in message
$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.

Christophe Gaubert
Le #617650
$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

drkm
Le #617649
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


Nicolas George
Le #617463
Christophe Gaubert wrote in message
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.

Christophe Gaubert
Le #617462
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

Nicolas George
Le #617461
Christophe Gaubert wrote in message
Oui, ou bien mettre des guillemets autour de "$(find ...)" .


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

Jacques L'helgoualc'h
Le #617460
Le 27-08-2005, 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 ?


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



Christophe Gaubert
Le #617459
Christophe Gaubert wrote in message

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


Poster une réponse
Anonyme