J’ai plus d’un millier de fichiers de noms similaires dans un répertoire et je souhaite les renommer. Les fichiers sont de ce format
GW_LGMS01-50160306185154-01375272.CDR GW_LGMS01-50160306237154-01375272.CDR.00001 GW_LGMS02-50160306133554-02308872.CDR GW_LGMS02-50160306137554-02308872.CDR.00014 GW_LGMS03-50160306221836-02217475.CDR.00001 GW_LGMS03-50160306235132-02217475.CDR
Je veux les renommer tous en même temps pour append un 0-
avant 50160306
sur chacun d’eux. C’est,
GW_LGMS01-0-50160306185154-01375272.CDR GW_LGMS01-0-50160306237154-01375272.CDR.00001 GW_LGMS02-0-50160306133554-02308872.CDR GW_LGMS02-0-50160306137554-02308872.CDR.00014 GW_LGMS03-0-50160306221836-02217475.CDR.00001 GW_LGMS03-0-50160306235132-02217475.CDR
50160306
est ce que tous les fichiers ont en commun.
En supposant que -50160306
est unique dans les noms de fichiers et que vous utilisez un shell qui comprend ${parameter/pattern/ssortingng}
(Bash, KornShell, etc.):
for f in *.CDR*; do echo mv "$f" "${f/-50160306/-0-50160306}" done
Faites-le avec l’ echo
en place pour voir ce qui se produirait, puis supprimez l’ echo
lorsque vous êtes certain de bien faire les choses.
Si vous avez peur de faire des bêtises, placez simplement les fichiers avec les nouveaux noms dans un nouveau dossier:
mkdir renamed for f in *.CDR*; do cp "$f" renamed/"${f/-50160306/-0-50160306}" done
Si vous n’utilisez pas bash:
#!/bin/sh for i in * ; do mv "$i" "$(printf '%s' "$i" | sed 's/\(50160306.*\)/0-\1/')" done
Il existe deux outils de rename
: l’un fait partie du paquetage util-linux, l’autre est basé sur Perl (voir cette réponse pour plus de détails). Pour savoir lequel vous avez, vérifiez à la fin de la page de manuel ( man rename
).
Avec la version util-linux, vous pouvez renommer vos fichiers comme suit:
rename 50160306 0-50160306 *
et pour la version basée sur Perl, ce serait (non testé!)
rename 's/50160306/0-$&/' *
Sachez qu’il n’y a pas de protection avec ces commandes – testez-les sur un petit échantillon avant de les utiliser.