J'utilise rename
tout le temps. C'est assez simple, mais j'espère que vous connaissez le regex de base:
rename "s/SEARCH/REPLACE/g" *
Cela remplacera la chaîne SEARCH
par REPLACE
dans chaque fichier (c'est-à-dire *
). Le /g
signifie global, donc si vous aviez un SEARCH_SEARCH.jpg
, il serait renommé REPLACE_REPLACE.jpg
. Si vous n'aviez pas /g
, la substitution n'aurait eu lieu qu'une seule fois et s'appellerait désormais REPLACE_SEARCH.jpg
. Si vous voulez que la casse ne soit pas prise en compte, ajoutez /i
(c'est-à-dire /gi
ou /ig
à la fin).
Avec les expressions régulières, vous pouvez faire beaucoup plus.
Notez que cette commande rename
correspond à la commande prename
(également appelée Perl rename
), qui prend en charge Perl expressions régulières. Il y a un autre rename
qui utilise des modèles et n'est pas aussi puissant. prename
était installé par défaut sur Ubuntu (avec Perl), mais vous devrez peut-être le faire maintenant:
sudo apt install rename
Voici quelques exemples:
Préfixe
Ajouter :
rename 's/^/MyPrefix_/' *
-
document.pdf
renommé en MyPrefix_document.pdf
Supprimer :
Vous pouvez également supprimer les chaînes indésirables. Disons que vous aviez 20 fichiers MP3 nommés comme CD RIP 01 Song.mp3
et que vous vouliez supprimer la partie "CD RIP", et que vous vouliez la supprimer de tous avec une seule commande.
rename 's/^CD RIP //' *
-
CD RIP 01 Song.mp3
à 01 Song.mp3
Notez l'espace supplémentaire dans '^CD RIP '
, sans l'espace, tous les fichiers auront un espace comme premier caractère du fichier. Notez également que cela fonctionnera sans le caractère ^
, mais correspondra à CD RIP
dans n'importe quelle partie du nom de fichier. Le ^
garantit qu'il ne supprime les caractères que s'ils sont le début du fichier.
Suffixe
Ajouter :
rename 's/$/_MySuffix/' *
-
document.pdf
renommé en document.pdf_MySuffix
Modifier :
rename 's/\.pdf$/.doc/' *
changera Something.pdf
en Something.doc
. (La raison de la barre oblique inverse est que .
est un caractère générique dans l'expression rationnelle, donc que .pdf
correspond à qPDF
alors que \.pdf
ne correspond qu'à la chaîne exacte .pdf
. BASH, vous devez mettre des barres obliques inverses dans des guillemets SINGLE! Vous ne pouvez pas omettre de guillemets ou utiliser des guillemets doubles, ou bash va essayer de les traduire. Mais les guillemets doubles et les barres obliques inverses sont utilisés, par exemple "\ n" pour une nouvelle ligne, mais puisque \.
n'est pas une séquence d'échappement arrière valide, elle se traduit par "\."
)
En fait, vous pouvez même placer les parties de la chaîne entre guillemets au lieu de la totalité: .
est identique à "\."
et .
à BASH. Il suffit de faire attention aux caractères spéciaux (et aux espaces).
Je suggère d'utiliser l'option 's/Search/Replace/g'
lorsque vous n'êtes pas certain d'avoir les expressions régulières correctes. Il montre ce qui serait renommé, puis quitte sans le faire. Par exemple:
rename -n s/'One'/'Two'/g *
Cela listera toutes les modifications qu’il aurait apportées, si vous n’aviez pas mis l’indicateur s/'Search'/'Replace'/g
à cet endroit. Si cela semble bon, appuyez sur Up pour revenir en arrière, puis effacez s/Search/Replace/g
et appuyez sur Enter (ou remplacez-le par -n
pour afficher toutes les modifications).