[bash] prob a la con

prob a la con [bash] - Linux et OS Alternatifs

Marsh Posté le 25-11-2003 à 17:45:22    

j ai un prob tres con j ai installé grip et lame  
j ai voulu encodé mes cd en ogg, j ai regardé ce que proposé grip par default l'extention est .ogg dc je me dis pas de prob ca va encodé en ogg  
 
j écoute mes .ogg ac rhutmbox mise a jours de ma debian et il les lis plus  
il affige not a vorbis file !
 
je verifie ac file et c'est des mp3 :( et non du ogg
 
j ai quelque Go ed ogg a renomé en .mp3
 
dc si qq un avais une solution simple ca m'interesserai
 
merci
 
 
note à taz non rm -rf /* ne va pas pas arranger le prob ;)

Reply

Marsh Posté le 25-11-2003 à 17:45:22   

Reply

Marsh Posté le 25-11-2003 à 18:01:58    

teubé !!!!
 
for f in $(find -name "*.ogg" ); do
       mv $f $(echo $f | sed s/ogg$/mp3/g)
done;


Message édité par Taz le 25-11-2003 à 18:02:11
Reply

Marsh Posté le 25-11-2003 à 18:04:30    

man rename
 
 
EDIT : la sol de taz est plus complète :D


Message édité par bobuse le 25-11-2003 à 18:05:15
Reply

Marsh Posté le 25-11-2003 à 18:04:32    

voire même
 
for f in $(find -name "*.ogg" ); do mv -v $f ${f/ogg/mp3/}; done
 
puisque que ${} fait la substituion
 
ou presque
 
en tout cas la première fonctionne


Message édité par Taz le 25-11-2003 à 18:05:45
Reply

Marsh Posté le 25-11-2003 à 18:10:21    

Je te conseille d'installer mmv.
C'est un petit utilitaire très pratique qui fait ça.
Pour la solution de Taz, rajoutes qq guillemets, tu pourrais avoir des surprises sans cela.
En bash pur, tu as aussi :

Code :
  1. for i in *.ogg; do mv "$i" "${i%.*}.mp3"; done


Avec mmv :

Code :
  1. mmv '*.ogg' '#1.mp3'


Reply

Marsh Posté le 25-11-2003 à 18:11:58    

cool. mais ma solution avec find fonctionne
je connaissais pas mmv, j'ai essayé avec mv et formant des groupes mais ça ne marche pas. mmv fonctionne bien

Reply

Marsh Posté le 26-11-2003 à 01:26:48    

Taz a écrit :

cool. mais ma solution avec find fonctionne


 
Pas d'avantage, il manque toujours les guillemets. Si un nom de fichier contient des espaces ça bug.

Reply

Marsh Posté le 26-11-2003 à 01:43:16    

ah oui c'est vrai j'ai oublié ce détail. pour régler ça avec find, il faut lui passer -fprint0 et récupérer avec xargs --null et là le problème est réglé

Reply

Marsh Posté le 26-11-2003 à 14:06:42    

Taz a écrit :

ah oui c'est vrai j'ai oublié ce détail. pour régler ça avec find, il faut lui passer -fprint0 et récupérer avec xargs --null et là le problème est réglé


Tu pourrais l'écrire complètement SVP ? Jamais réussi à le faire correctement sans échapper à la main tous les \,"()[] et consorts
 

Code :
  1. find . -name "*.ogg" -fprint0 | xargs --null ...


je mets quoi dans les "..." ?

Reply

Marsh Posté le 26-11-2003 à 14:46:26    

et bien la commande !
man find
man xargs
-fprint0 fait que chaque chemin de fichier est une chaine terminée par un 0 terminal
--null dit à xargs de considérer qu'une chaine setermine par un 0, donc il ne s'arrete plus à un caracètre d'espacement

Reply

Marsh Posté le 26-11-2003 à 14:46:26   

Reply

Marsh Posté le 26-11-2003 à 14:56:14    

Ca j'ai bien compris merci. Ma question est toujours: "que mets-tu dans les ... ?"
Dans ta ligne de commande qui commencera par "mv", tu auras besoin  deux fois du fichier en question.
Moi jusqu'à présent je faisais un petit fichier auxiliaire débile

Code :
  1. #!/bin/sh
  2. echo mv "$1" "${1/ogg/mp3}"


appelé "rn" et ensuite

Code :
  1. find . -name "*.ogg" -fprint0| xargs --null rn | sh


Ma question est donc: comment fait-on pour éviter cette usine à gaz de fichier "rn" et de " | sh" ?
 
[/code]

Reply

Marsh Posté le 26-11-2003 à 14:57:39    

NB: Ca marcherait aussi avec un find --exec si du moins on pouvait faire du pattern-replacement dans la commande passée à --exec.
Mais pas réussi pour le moment.

Reply

Marsh Posté le 26-11-2003 à 15:09:26    

deux minutes de man plus tard :
 

Code :
  1. find . -iname '*.ogg' -print0 | args -0 rename 's/.ogg$/.mp3/'


Reply

Marsh Posté le 26-11-2003 à 15:36:35    

Merci. OK, le rename évite d'avoir à passer le nom du fichier en double.
Mais si tu veux faire autre chose qu'un simple rename (un convert par exemple, bref ce que tu veux qui a besoin de deux noms de fichier), comment faire sans passer par un script intermédiaire et un pipe sh ?
EDIT: avec awk '{ print "ma command qui va bien \"" $1 "\" \"" $1 "\""}'  ?


Message édité par glacote le 26-11-2003 à 15:38:43
Reply

Marsh Posté le 26-11-2003 à 15:38:23    

ArSuniK a écrit :

deux minutes de man plus tard :
 
find . -iname '*.ogg' -print0 | xargs -0 rename 's/.ogg$/.mp3/'
 


Message édité par SomeBugsInMe le 26-11-2003 à 15:39:16
Reply

Sujets relatifs:

Leave a Replay

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