70 votes

Comment puis-je renommer des fichiers en lot en utilisant le Terminal?

J'ai un ensemble de fichiers, tous portant le nom de nnn.MP4.mov. Comment pourrais-je les renommer pour qu'ils soient simplement nommés nnn.mov ?

1 votes

Installez muCommander. Il a le renommage par lot de style Total Commander. Pourquoi perdre du temps sur cette daube de commande par lot de 100 caractères époustouflants?

0 votes

@Nakilon parce que apprendre la ligne de commande offre un plus grand retour sur investissement

97voto

kurumi Points 10096

Tout d'abord, exécutez une simulation (qui ne renommera effectivement aucun fichier) avec la commande suivante :

for file in *.mov
do
  echo mv "$file" "${file/MP4./}"
done

Si tout semble correct, supprimez le echo de la troisième ligne pour renommer effectivement les fichiers.

19 votes

Je n'arrivais pas à comprendre pourquoi cela ne fonctionnait pas... il y avait une sortie et on aurait dit que ça fonctionnait, mais en réalité ça ne faisait rien. Eh bien, j'ai enfin compris que vous devez supprimer l'instruction ECHO pour que cela fonctionne réellement (sur OSX 10.7 de toute façon). Donc si vous gardez l'instruction echo, vous pouvez le tester pour voir si le renommage va fonctionner comme vous le souhaitez, puis supprimez l'echo pour le faire fonctionner. Donc l'équivalent de Windows de ren *-hd.png *.png est : pour fichier dans *.png faire mv "$file" "${file/-hd/}" fin

4 votes

Pour exécuter le script, vous devez : 1. enregistrez-le dans le fichier rename.sh; 2. rendez-le exécutable chmod 755 rename.sh; 3. lancez-le depuis le dossier actuel où vous avez des fichiers à renommer et le script shell ./rename.sh; 4. si le résultat est bon, supprimez echo du script et lancez-le à nouveau. J'ai eu besoin d'ajouter une extension à un groupe de fichiers. donc mon action dans le script était comme ceci: mv "$file" "${file}.jpeg"

0 votes

Il s'agit d'un script qui doit être créé en tant que fichier puis exécuté, n'est-ce pas? Des indices?

35voto

Gatada Points 473

J'ai juste utilisé avec succès Automator (première fois que ça m'embête), et ça fonctionne vraiment bien. J'ai enregistré l'automatisation en tant que Service. Il m'a fallu environ 10 secondes pour rendre quelque chose facilement réutilisable :

  1. Ouvrez Automator.
  2. Comme type de document, choisissez "Service".
  3. Changez Service reçoit la sélection de "Texte" à "fichiers et dossiers".
  4. Envisagez de changer "toute application" en juste Finder.
  5. Dans la barre latérale, sélectionnez "Fichiers et dossiers" (sous Bibliothèque) et dans les actions répertoriées, dans la colonne centrale, faites glisser "Renommer les éléments du Finder" vers le côté droit et déposez-le à l'intérieur de "Faites glisser des actions ou des fichiers ici pour construire votre flux de travail".
  6. Changez l'action que vous venez d'ajouter de "Ajouter une date ou une heure" à "Rendre séquentiel".
  7. Cliquez sur "Options" en bas de l'action et cochez l'option "Afficher cette action lorsque le flux de travail s'exécute".
  8. Appuyez sur "CMD+S" pour enregistrer le service en tant que quelque chose comme "Remplacer le texte"..
  9. Fini !

Maintenant, vous pouvez faire un clic droit sur n'importe quelle sélection dans Finder, aller dans le menu Service et sélectionner "Remplacer le texte", remplir comment vous voulez que le texte soit modifié ou remplacé - et cliquez sur "Continuer" pour appliquer les changements configurés.

0 votes

J'ai voté contre parce que la question a le tag "terminal".

0 votes

Super réponse, même si ce n'est pas ce que l'OP demandait. Toute occasion pour moi d'apprendre Automator est la bienvenue :-) D'ailleurs, cela ne fonctionne pas sur un dossier, mais cela fonctionne sur des fichiers sélectionnés en grande quantité.

0 votes

Excellent! Merci beaucoup.

13voto

SONIC3D Points 154

Pour tester, imprimer l'opération:

for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";echo mv \"$file\" \"$j\"; done

Pour que cela fonctionne:

for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";mv "$file" "$j"; done

0 votes

Merci pour la solution en une ligne

11voto

user2694 Points 71
pour n in *.MP4.mov
faire
   mv $n $(echo $n | sed -e 's/.MP4//')
done

Cela fonctionnera même sur des anciens shells qui n'ont pas de substitution de paramètres, et c'est un peu plus lisible à mes yeux du moins.

0 votes

J'ai appliqué ceci aux fichiers qui utilisent _MG_ dans leur nom que je devais changer en -IMG_ parfaitement en modifiant avec un * et un * au milieu. Ça a très bien fonctionné. Merci!

1voto

Yosi Taguri Points 1245
pour i in `ls *png`;faire echo mv $i "${i%%.*}"@xx."${i##*.}";fait

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X