Batch / Multi renomme uniquement les fichiers avec une plage de numéros spécifique

4

J'ai une situation où j'ai les éléments suivants:

file01.ext
.
.
.
file99.ext
file100.ext
.
.
.

Et je veux (en utilisant renommer) insérer le '0' pour les fichiers 01-99 (afin qu'ils deviennent 000-099) mais pas modifier les fichiers plus grands que 100. Quelle expression dois-je utiliser et quelle est une bonne source sur l'apprentissage d'expressions régulières telles que celles-ci?

Sous Windows, j'aurais utilisé la fonction de renommage multiple de Total Commander qui a une syntaxe de renommage très simple. Existe-t-il de bonnes alternatives pour cet outil (multi-renommer) pour Ubuntu?

    
posée user300704 15.12.2014 - 08:01
la source

2 réponses

5

Utilisation de rename

Un outil généralement utile pour ce type d’activité est rename du package perl . Il applique une substitution perl au nom du fichier:

rename 's/file/file0/' file[0-9][0-9].ext

Comment cela fonctionne:

  • s/file/file0/

    Ceci est une commande de substitution perl . Il remplace l'occurrence de file dans un nom de fichier par file0 .

  • file[0-9][0-9].ext

    C'est la liste des fichiers sur lesquels rename doit fonctionner. [0-9] signifie un nombre compris entre 0 et 9. [0-9][0-9] signifie deux nombres, l'un suivant l'autre.

La page de manuel de rename est ici .

Remarque: Cela nécessite la version perl de rename . Il y a aussi un utilitaire rename qui fait partie de util-linux mais ça marche différemment.

Utilisation de bash

Cette approche utilise une boucle for combinée avec substitution de modèle :

for f in file[0-9][0-9].ext; do mv "$f" "${f/file/file0}"; done

Comment ça marche:

  • for f in file[0-9][0-9].ext; do

    Cela lance une boucle sur chaque nom de fichier qui correspond au glob file[0-9][0-9].ext .

  • mv "$f" "${f/file/file0}"

    Cela renomme les fichiers en utilisant la substitution de motif de bash . Il remplace file par fichier0 'dans le nom du fichier.

  • done

    Ceci marque la fin de la boucle for .

Cette approche nécessite bash (ou un autre shell avancé).

bash est le shell interactif par défaut et cette approche fonctionnera sous bash . Ainsi, cela devrait fonctionner sur la ligne de commande habituelle.

    
réponse donnée John1024 15.12.2014 - 08:24
la source
1

Renommer en utilisant différentes regex:

rename -n 's/[^0-9](([0-9]){2})\.ext$/0.ext/' *

[^0-9](([0-9]){2})\.ext$ Correspond à tout [^0-9] autre que chiffre, suivi du groupe de nombres avec la longueur = 2 qui se termine par .ext . Donc, en remplacement, ajoutez un groupe 0 et affiche correspondant, puis leur extension.

Ou une alternative pour regex:

rename -n 's/[^\d](\d{2})\.ext$/0.ext/' *

\d correspond à un nombre.

    
réponse donnée αғsнιη 15.12.2014 - 08:55
la source

Lire d'autres questions sur les étiquettes