6 votes

Comment renommer tous les fichiers d'un dossier

J'ai un dossier qui contient de nombreux fichiers nommés avec la même structure :

file.number1.2010.720p.otherinfo.mp4
file.number2.1990.720p.otherinfo.mp4
....

Je voudrais supprimer toute la séquence :

YEAR.720p.otherinfo

Le nom sera donc :

file.number1.mp4
file.number2.mp4
....

Et enfin je voudrais supprimer tous les points (.) sauf celui de la fin (.mp4)

Quelles commandes dois-je utiliser pour créer un tel script ?

6voto

Raffa Points 11919

Cela fera l'affaire :

Tout d'abord : Installer rename en exécutant la commande suivante dans le terminal :

sudo apt install rename

Deuxièmement : Dans le terminal, cd dans le répertoire contenant vos fichiers.

Enfin : Renommez les fichiers au format souhaité en exécutant la commande suivante dans le terminal :

rename 's/^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$/$1$2.mp4/' *

Terminé


Avis :

Pour voir comment le rename opérera sur vos fichiers mais sans vraiment les renommer (en imprimant simplement la sortie dans le terminal), vous pouvez ajouter l'option -n après elle. Comme ça :

rename -n 's/^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$/$1$2.mp4/' *

Explication - à la demande de Hamza :

Pièce n° 1 :

's/ORIGINAL/NEW/'

Remplace le ORIGINAL avec la chaîne NEW chaîne.

Pour voir comment cela fonctionne, c'est aussi simple que cela :

  • Veuillez exécuter dans le terminal rename -n 's/file.number1.2010.720p.otherinfo.mp4/NEW.mp4/' *
  • En supposant que vous avez un fichier nommé file.number1.2010.720p.otherinfo.mp4 dans le répertoire actuel.
  • La sortie serait rename(file.number1.2010.720p.otherinfo.mp4, NEW.mp4)

Pièce n° 2 :

^(.+)\.(.+)\.(.+)\.(.+)\.(.+)\.mp4$

Commence au début de la chaîne ^ et correspond ensuite à un ou plusieurs caractères ( n'importe quel caractère ) (.+) avant le point \.

Ce groupe est placé dans une variable $1 et répété quatre fois de plus (cinq au total), chaque groupe est placé dans une variable ( $2 , $3 , $4 , $5 ) jusqu'à ce que .mp4 représenté par \.mp4 est atteint.

Assurez-vous que la chaîne se termine par .mp4 en utilisant le $ qui correspond à la fin de la chaîne.

Cette partie est, cependant, un peu flexible et vous donnera des résultats indésirables si le nommage des fichiers est incohérent et que vous avez des fichiers avec plus de cinq parties séparées par des points dans leurs noms comme file.number1.2010.720p.otherinfo.extrainfo.mp4

Si c'est le cas, veuillez remplacer cette partie par l'expression régulière plus stricte ci-dessous. De cette façon, elle ne fonctionnera que sur les fichiers dont le nom comporte cinq parties séparées par des points :

^([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.([^.]+)\.mp4$

Pièce n° 3 :

$1$2.mp4

Définit le nouveau nom de fichier comme ce qui se trouve sous la variable pour le premier groupe $1 ( dans ce cas file ) + ce qui se trouve sous la variable pour le deuxième groupe $2 ( dans ce cas number(x) ) + .mp4

Pièce n° 4 :

*

Opère sur tous les fichiers du répertoire courant.

2voto

Sebastien Points 2038

Vous pouvez utiliser cut y bash manipulation de chaînes de caractères :

Première approche : uniquement avec cut :

for I in .*mp4
do
    echo mv "$I" "$(echo $I | cut -d. -f 1,2,6)"
done 

Explication :

  • for... sélectionnera tous les .mp4 Dateien
  • echo $I | convertira le I en une entrée pour le programme suivant
  • cut -d. -f 1,2,6 sélectionnera les champs 1, 2 et 6 où les champs sont séparés par .

Mais cette approche peut être problématique car le 6ème champ peut ne pas être l'extension.


Vous pouvez donc avoir une deuxième voie :

for I in .*mp4
do
    echo mv "$I" "$(echo $I | cut -d. -f 1,2).mp4"
done 

Avec cette commande, vous forcez l'extension à être .mp4 . Ça peut marcher, mais que faire si vous n'avez pas seulement mp4 avec le même modèle de nom ?


Dans ce cas, vous pouvez utiliser la sélection par extension :

for I in *mp4 *avi
do
    echo mv "$I" "$(echo $I | cut -d. -f 1,2).${I##*.}"
done
  • ${I##*.} vous permettra de sélectionner ce qui se trouve derrière le dernier . en variable I

Note : pour éviter un mauvais comportement, j'ai ajouté echo dans les commandes pour voir ce qu'elles vont faire avant de les exécuter réellement.

1voto

Cynicus Rex Points 136

Sélectionnez tous les fichiers et appuyez sur F2 ; puis faites ce qui est montré dans l'image ci-dessous. bulk rename

https://docs.xfce.org/xfce/thunar/4.12/bulk-renamer/start

0voto

Bas Lamerichs Points 570

J'utilise toujours Thunar (gestionnaire de fichiers) pour cela. il suffit de l'ouvrir, de sélectionner les fichiers que vous voulez modifier (couper/coller/ajuster/remplacer des caractères) et ensuite clic droit->renommer

vous obtenez un menu sophistiqué avec beaucoup de options et des moyens de changer les noms de vos fichiers et leurs extensions, et de voir leurs aperçus dans le panneau de droite.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X