web-dev-qa-db-fra.com

comment puis-je renommer des fichiers par lots à l'aide du terminal?

J'ai un ensemble de fichiers, tous nnn.MP4.mov comment pourrais-je les renommer pour que ce soit juste nnn.mov?

57
Jake Wilde

Tout d'abord, effectuez un essai à sec (ne renommera en fait aucun fichier) avec les éléments suivants:

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 réellement les fichiers.

84
kurumi

J'ai utilisé avec succès Automator (la première fois que je me suis dérangé), et cela fonctionne très bien. J'ai enregistré l'automatisation en tant que service. Il a fallu environ 10 secondes pour rendre quelque chose facilement réutilisable:

  1. Ouvrez Automator.
  2. Comme type de document, choisissez "Service".
  3. Change Service reçoit le "Texte" sélectionné en "fichiers et dossiers".
  4. Envisagez de remplacer "n'importe quelle application" par 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 la droite et déposez-le dans "Faites glisser les actions ou les fichiers ici pour créer votre flux de travail. "
  6. Modifiez 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 workflow s'exécute".
  8. Appuyez sur "CMD + S" pour enregistrer le service comme quelque chose comme "Remplacer le texte" ..
  9. Terminé!

Vous pouvez maintenant cliquer avec le bouton droit sur n'importe quelle sélection du Finder, aller dans le menu Service et sélectionner "Remplacer le texte", indiquer comment vous voulez que le texte soit modifié ou remplacé - et cliquez sur "Continuer" pour appliquer les modifications configurées.

35
Johan
for n in *.MP4.mov
do
   mv $n $(echo $n | sed -e 's/.MP4//')
done

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

11
vielmetti

Pour tester l'impression de 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 le faire fonctionner:

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

Sur mac OSX, vous pouvez installer la commande rename via Homebrew: brew install rename

Ensuite, vous pouvez renommer en utilisant find/replace à partir de ce dossier sur la ligne de commande:

rename 's/\.MP4\././' *

Vous pouvez également voir plus d'options en utilisant man rename.

5
YPCrumble

OS X a un Rename Files… élément de menu contextuel qui est invoqué lorsque vous sélectionnez deux ou plusieurs fichiers dans le Finder. Fournit la même fonction que la réponse Automator ci-dessus. Bien que Automator vous fournisse les outils pour aller plus loin si vous le souhaitez.

(Je sais que OP a demandé le terminal, mais 33 autres personnes aiment la réponse Automator)

2
wide_eyed_pupil

vimv vous permet de renommer plusieurs fichiers en utilisant les capacités d'édition de texte de Vim.

La saisie de vimv ouvre une fenêtre Vim qui répertorie tous les fichiers et vous pouvez effectuer une correspondance de modèle, une sélection visuelle, etc. pour modifier les noms. Après avoir quitté Vim, les fichiers seront renommés.

[Avertissement: je suis l'auteur de l'outil]

1
thameera
for i in `ls *png`;do echo mv $i "${i%%.*}"@xx."${i##*.}";done
1
Yosi Taguri
for i in *; 
do j=`echo $i | cut -d . -f 1`; 
j=$j".mov";
mv $i $j; 
done

cela coupe tout avant le premier point et ajoute .mov

mais si certains fichiers sont par exemple hi.2.mov et hi.1.mov one seront écrasés, alors utilisez-les soigneusement ^^

0
sharpner
ls -1 *.MP4.mov | while read f; do mv -i "$f" "$(basename \"$f\" .MP4.mov)"; done

Edit: entièrement réécrit.

0
Philipp T.