J'ai plusieurs fichiers (environ 1000) nommés comme tels:
abcdefg123456.xyz
abcdefg123457.xyz
abcdefg123458.xyz
abcdefg123459.xyz
Certains fichiers comportent 4 chiffres et lettres aléatoires supplémentaires (dans n'importe quel ordre) après le nom. Ce sont peut-être des doublons, mais pas toujours. Je dois donc les remplacer par le format d'origine pour vérifier s'ils sont en double ou non. Ils ont ce format:
abcdefg123456a789.xyz
abcdefg123457b987.xyz
abcdefg123458c879.xyz
abcdefg123459d897.xyz
À l’occasion, il existe également une mauvaise extension,
abcdefg123456.xyzedf
abcdefg123456.xyzfed
Je souhaite renommer ces fichiers au format original d'abcdefg suivi des 6 chiffres d'origine, c'est-à-dire supprimer les 4 chiffres et lettres aléatoires suivants et effacer l'extension finale .xyz Ce que j'ai pour l'instant est le suivant:
rename -n "s/[a-z][0-9]{6}.xyz/.xyz/g" *
Mais cela ne semble pas fonctionner. Pour une raison quelconque, le résultat est:
abcdef.xyz (no numbers)
EDIT: J'étais un peu déchiré entre quelle réponse choisir, parce que les deux ont aidé à trouver la solution. Je suis allé chercher des arguments, car il a également contribué à la deuxième partie de la question. Mais votre aide est également grandement appréciée, Mark Perryman - et les commentateurs également, bien sûr.
...a789.xyz
, ...b987.xyz
mais suivent un schéma aléatoire au lieu: ...a7b8.xyz
, ...c9d7.xyz
. Merci.
rename -n "s/[a-z][a-z0-9]{3}\.xyz.*/.xyz/g" *
fera. Sinon, vous ne pouvez pas simplement utiliser [a-z0-9]{4}
le modèle de correspondance, car cela supprimera les quatre derniers chiffres des fichiers au format standard et vous devrez utiliser des groupes de correspondance, comme dans les réponses, bien que vous puissiez essayer rename -n "s/[a-z0-9]{4}\.xyz.*/.xyz/g" ?????????????????.xyz*
(17 requêtes), qui ne devrait traiter que les noms de fichiers les plus longs. Notez la différence entre la correspondance d'expression régulière et l'expansion de fichier shell.
{6}
chiffres: cela devrait être pour vos exemples{3}
. Pour supprimer des caractères supplémentaires après le,.xyz
vous devez ajouter.*
à la fin de la chaîne de correspondance, en donnantrename -n "s/[a-z][0-9]{3}\.xyz.*/.xyz/g" *
la commande (en omettant le-n
moment où vous êtes satisfait des actions).