2011-12-18 3 views
8

Je suis en train de développer un simple launchdaemon qui copie des fichiers d'un répertoire à un autre. J'ai obtenu les fichiers à transférer sur amende.Modifier les extensions de fichiers de plusieurs fichiers dans un répertoire avec terminal/bash?

Je veux juste les fichiers dans le répertoire à la place des années .mp3 de

de .dat

Certains fichiers se présentent comme suit:

6546785.8786.dat
3678685.9834.dat
4.658.679,4375. dat

Je veux qu'ils se présentent comme suit:

6546785.8786.mp3
3678685.9834.mp3
4658679.4375.mp3

C'est ce que j'ai à la fin du script bash pour renommer les extensions de fichier.

cd $mp3_dir 
mv *.dat *.mp3 
exit 0 

problème est le fichier apparaît comme * .mp3 au lieu de 6546785.8786.mp3

et quand un autre fichier 6546785.8786.dat est importé mp3_dir $, le * .mp3 est remplacé par le nouveau .mp3

Je dois renommer juste les extensions de fichier .dat à .mp3 et garder le nom de fichier.

Des idées? Suggestions?

Répondre

27

Essayez:

for file in *.dat; do mv "$file" "${file%dat}mp3"; done 

Ou, si votre shell l'a:

rename .dat .mp3 *.dat 

Maintenant, pourquoi votre commande ne fonctionne pas: tout d'abord, il est plus que certain que vous ne Avait un fichier dans votre répertoire lorsqu'il a été renommé en *.mp3, sinon mv aurait échoué avec *.mp3: not a directory.

Et mv ne fait PAS de magie avec les globs de fichiers, c'est le shell qui développe globs. Ce qui signifie que, si vous aviez ce fichier dans le répertoire:

t.dat 

et que vous avez saisi:

mv *.dat *.mp3 

la coquille aurait élargi *.dat-t.dat. Cependant, comme rien ne correspond *.mp3, la coquille aurait laissé tel quel, ce qui signifie la commande est complètement développée:

mv t.dat *.mp3 

qui va créer un fichier nommé, littéralement, *.mp3.

Si, d'autre part, vous aviez plusieurs fichiers nommés *.dat, comme dans:

t1.dat t2.dat 

la commande aurait étendu à:

mv t1.dat t2.dat *.mp3 

Mais cela ne fonctionne pas: si il y a plus de deux arguments à mv, il s'attend à ce que le dernier argument (ie, *.mp3) soit un répertoire.

+0

Cela fonctionnait très bien. Je jure que je pensais que j'ai cherché l'Internet entier pour la bonne réponse. Merci beaucoup. Maintenant, je dois comprendre comment nommer ce fichier .mp3 au nom de la chanson automatiquement. – CokePokes

+0

Pas de problème :) Voir aussi l'édition, il y a une autre commande plus agréable pour le faire. Et n'oubliez pas d'accepter la réponse;) – fge

+3

+1. Si vous mettez des variables dans "doublequote", cela fonctionnera aussi pour les noms de fichiers avec des espaces. –

15

Pour tout le monde sur un mac, c'est assez facile si vous avez BREW, si vous n'avez pas de breuvage alors mon conseil est de l'obtenir. puis lorsqu'il est installé tout simplement faire

$ brew install rename 

puis une fois Rename est installé il suffit de taper (dans le répertoire où les fichiers sont)

$ rename -s dat mp3 * 
Questions connexes