J'ai ce répertoire et je veux renommer les fichiers:
===> ls -1 Der-vierte-Weise/
10 - 10 - Erkenntniss.ogg
1 - 01 - Hoffnung.ogg
11 - 11 - Wahrheit.ogg
12 - 12 - Dankbarkeit.ogg
13 - 13 - Kredits.ogg
2 - 02 - Familie.ogg
3 - 03 - Demut.ogg
4 - 04 - Freude.ogg
5 - 05 - Schoenheit.ogg
6 - 06 - Solidaritaet.ogg
7 - 07 - Entscheidung.ogg
8 - 08 - Hilfe.ogg
9 - 09 - Unterstuetzung.ogg
Le résultat devrait ressembler à ceci:
===> ls -1 Der-vierte-Weise/
01 - Hoffnung.ogg
02 - Familie.ogg
...
Je voudrais résoudre ce problème avec des outils shell courants.
command-line
bash
batch-rename
guettli
la source
la source
Réponses:
Vous pourriez utiliser
rename
...Supprimer
-n
après le test pour renommer réellement les fichiersExplication
s/old/new/
remplacerold
parnew
^
début de chaîne[0-9]+
quelques chiffresla source
rename
outil. Utilise-t-il PCRE? ... serait génial.rename
est un script Perl, il prend donc en charge les expressions régulières Perl; PCRE n'est qu'un sous-ensemble de cela. Cependant, tout ce que vous savez de PCRE sera applicablerename
.rename
a des expressions régulières compatibles perl. Oui, l'implémentation pcre n'est pas utilisée. J'ai compris cela :-) Merci pour votre réponse rapide.bash
expansion des paramètres pour éliminer la portion requise dès le début:Forme développée:
echo
est pour le fonctionnement à sec; se débarrasser de lui pour une action réelle:Exemple:
la source
rename
commande. (Moins de frappe nécessaire).rename
est la voie à suivre si vous connaissez PCRE; larename
réponse a déjà été donnée alors il faut bouger avec purebash
. Juste pour noter,python
le module dere
(ouregex
) n'est pas entièrement compatible BTW PCRE.${f#[[:digit:]]*-[[:blank:]]}
c'est moche. Oui cela fonctionne. Mais nous vivons au 21e siècle. Je pense qu'il est temps de passer de "ça marche" à "c'est facile et amusant". Si "ça marche" est le but, alors Linux ne perdra jamais le préjugé de ne pas être convivial. Puisque vous avez déjà obtenu beaucoup de votes positifs, ce vote négatif ne devrait pas faire de mal (j'espère). Si c'est le cas, dites-le-moi et je le reprendrai.[[:digit:]]
et[[:blank:]]
étaient là pour se conformer à votrelocale
, ce sont assez communs dans Regex aussi.