1

C'est simple. Je veux renommer des fichiers .sig en .raw. Sous DOS, il me suffirait d'écrire "ren *.sig *.raw"

Mais visiblement sous shell, ça a l'air d'être une commande plus obscure, et ça me gonfle de buter sur quelque chose d'aussi simple que ça...

J'ai essayé mv *.sig *.raw => "*.raw" n'est pas un répertoire (gol)
Puis rename '.sig' '.raw" => queud...

Bref, comment changer rapidement les extensions d'une tétra-chiée de fichiers ?
zen

2

Il n'y a aucune notion de mémoire dans le globbing sous Unix, les * sont simplement transformées en fonction des fichiers disponibles. Si aucun fichier ne correspond à ton masque, ce qui a l'air d'être le cas, ton expression n'est pas transformée. Dans ton exemple, ta commande "mv *.sig *.raw" va être modifiée en "mv fichier1.sig fichier2.sig [...] *.raw" par le shell puis exécutée, ce qui va bien sûr foirer.

Tu peux essayer ça :

for file in *.sig; do mv "$file" "${file%.sig}.raw"; done

Pour la petite explication, la boucle fait un parcours sur les fichiers qui correspondent à l'expression "*.sig" en mettant le nom du fichier courant dans la variable "$file" à chaque tour de boucle. Le "mv" va ensuite exécuter le renommage, et l'expression "${file%.sig}.raw" signifie "retirer .sig à la fin de la valeur puis ajouter .raw"
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

rename -v 's/\.sig$/\.raw/' *.sig

4

OK, merci pour vos réponses ^^