for i in `ls | grep mpc.wav`; do mv $i $i.wav done
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.
oki lol sinon qu'est ce que veut dire tes acolades. Je ne les ai jms utilisé. Juste en 2-3 mots.
fguilleme
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....
M300A
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
fguilleme
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!
arsunik
ma tuxitude me beastifie
Posté le 16-09-2004 à 13:35:14
Avec mmv, tu peux :
mmv '*.mpc.wav' '#1.wav'
Publicité
Posté le 16-09-2004 à 13:35:14
M300A
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
M300A
Posté le 17-09-2004 à 10:55:22
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
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
M300A
Posté le 17-09-2004 à 12:06:10
Je ne n'y suis toujours pas arrivé (je test avec mv depuis 2H )
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 ?
fguilleme
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/
fguilleme
Posté le 22-09-2004 à 09:45:04
le dernier était
echo toto/ | sed '/[^/]$/s#$#/#' renvoie toto/