Commande Rename....

Commande Rename.... - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 16-09-2004 à 10:16:38    

:hello:
 
J'ai besoin de renommer une series de fichiers *.mpc.wav en *.wav. Je n'arrive pas à comprendre le fonctionnement de la commande Rename.
 
Pouvez vous m'aider :??:

Reply

Marsh Posté le 16-09-2004 à 10:16:38   

Reply

Marsh Posté le 16-09-2004 à 10:34:15    

rename utilise des expressions régulières.
 
rename 's/\.mpc\.wav$/.wav/' *.wav

Reply

Marsh Posté le 16-09-2004 à 10:35:11    

mv ancien_nom nouveau_nom
 
ou sinon si tu veux faire renommer tout les fichiers qui sont dans un rep :
for i in `ls | grep mpc.wav`; do mv $i $i.wav done
 
je pense que ca doit marcher, sinon tu peux utiliser find avec exec

Reply

Marsh Posté le 16-09-2004 à 10:43:42    

weed a écrit :


for i in `ls | grep mpc.wav`; do mv $i $i.wav done


 
:ouch:
Il est preferable de remplacer le "ls | grep mpc.wav", qui d'ailleurs ne fonctionnera pas sitot qu'un nom de fichier contiendra un espace par un "*.mpc.wav".
Ensuite, le "mv $i $i.wav" doit être écrit :
mv "$i" "${i%.mpc.wav}".wav
 
Ensuite effectivement, la boucle for est correcte :)
 
Une autre solution est l'utilisation de mmv, petit utilitaire parfois bien pratique.

Reply

Marsh Posté le 16-09-2004 à 10:53:48    

ArSuniK a écrit :


 
Ensuite effectivement, la boucle for est correcte :)
 


 
Je moinssoie :o
 
Il manque un ";" avant "done" [:ooooo]


Message édité par bobuse le 16-09-2004 à 11:49:40

---------------
get amaroK plugin
Reply

Marsh Posté le 16-09-2004 à 10:54:26    

ArSuniK a écrit :

:ouch:
mv "$i" "${i%.mpc.wav}".wav


oki lol  
sinon qu'est ce que veut dire tes acolades. Je ne les ai jms utilisé. Juste en 2-3 mots.

Reply

Marsh Posté le 16-09-2004 à 11:14:54    

c'est pas trop les accolades qui sont bien patriques d'ailleurs mais l'expansion des pararametes du style ${...}
Entre les accolades tu peux faire différents trucs dont un remplacement.  
${i} est pareil que $i
${i/toto/tata} correspond à $i avec toto remplacé par tata. Exemple: si $i='toto es beau' ${i/toto/tata} renvoie tata est beau.
{i%toto} permet en général de supprimer la fin de $i
Le top c'est qu'on peut utiliser un pattern
${f%.*} supprime l'extension (basename le fait aussi mais ne fait que ça)
Au fait c'est surtout du bash....

Reply

Marsh Posté le 16-09-2004 à 13:22:46    

Pour ce qui est de la liste des fichiers, c'est deja ok, mais un mv *.mpc.wav *.wav ne fonctionne pas :(
 
Je vais essayer avec rename :)

Reply

Marsh Posté le 16-09-2004 à 13:29:25    

il peut pas c'est pas comme dos. tu dois utiliser des scripts pour ça. Le problèmest que c'est le shell qui comprend les wildcards pas mv. mv prend deux noms de fichier basta!

Reply

Marsh Posté le 16-09-2004 à 13:35:14    

Avec mmv, tu peux :
mmv '*.mpc.wav' '#1.wav'

Reply

Marsh Posté le 16-09-2004 à 13:35:14   

Reply

Marsh Posté le 16-09-2004 à 13:39:52    

mmv ne semble pas etre une commande de base :)
 
Je vais rester sur rename, j'éspère que ca va le faire ;)

Reply

Marsh Posté le 17-09-2004 à 10:55:22    

:hello:
 
J'ai avancé un peu, la commande rename fonctionne bien, mais le problème c'est que dans mon script, la commande n'est pas éxécuter dans le rep donc ca ne fonctionne pas :D
 
J'utilise une variable qui contient le nom du fichier a renommer, quelqu'un peut m'adapter rename 's/\.mpc\.wav$/.wav/' *.wav en utilisant le nom complet du fichier ?
 
Sinon j'ai un petit probleme, pour définir ma boucle je récupère le nombre de fichier par un ls wc -l l'ennuie c'est que le wc -l renvoie le nombre de ligne suivi du nom du fichier sur lequel la commande est lancée. Je récupère ensuite les 2 premiers octets via head. Du coup si il y'a plus de 99 fichiers, ca ne va pas fonctionner car il y'a 3 octets à récupéré :) Comment faire ?
 
 
Merci :jap:

Reply

Marsh Posté le 17-09-2004 à 12:06:10    

:hot:
 
Je ne n'y suis toujours pas arrivé (je test avec mv depuis 2H :fou:)

Reply

Marsh Posté le 17-09-2004 à 12:16:55    

C'est bon je viens de réussir :hot:

Reply

Marsh Posté le 22-09-2004 à 00:03:03    

fguilleme a écrit :

c'est pas trop les accolades qui sont bien patriques d'ailleurs mais l'expansion des pararametes du style ${...}
Entre les accolades tu peux faire différents trucs dont un remplacement.  
${i} est pareil que $i
${i/toto/tata} correspond à $i avec toto remplacé par tata. Exemple: si $i='toto es beau' ${i/toto/tata} renvoie tata est beau.
{i%toto} permet en général de supprimer la fin de $i
Le top c'est qu'on peut utiliser un pattern
${f%.*} supprime l'extension (basename le fait aussi mais ne fait que ça)
Au fait c'est surtout du bash....


i='toto es beau'
echo {i%toto} renvoie : toto est beau
i='.toto es beau'
echo ${i%.*} renvoie .toto est beau
 
je pense que tu t'es trompé dans tes commandes.
 
sinon un grand merci pour ces info.  
 
 
Sinon à titre d'info,
i="/home/weed"
peut tu rajouter un / à la fin de la chaine s'il n'est pas présent avec ton astuce ?

Reply

Marsh Posté le 22-09-2004 à 09:44:14    

le % est pour la fin  
i='toto est beau'
${i%toto} renvoie toto es
$(i/beau/moche} renvoie toto est moche
for f in * do; echo ${f%.*}; done
pour rajouter un / à la fin d'une chaine je pense pas que ça marche et le plus simple est de passer par sed
echo toto | sed '/[^/]$/s#$#/#' renvoie toto/
echo toto | sed '/[^/]$/s#$#/#' renvoie toto/

Reply

Marsh Posté le 22-09-2004 à 09:45:04    

le dernier était
echo toto/ | sed '/[^/]$/s#$#/#' renvoie toto/

Reply

Sujets relatifs:

Leave a Replay

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