Renommez les fichiers avec une commande de ligne

10

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 les outils shell courants.

    
posée guettli 19.01.2017 - 08:48
la source

2 réponses

18

Vous pouvez utiliser rename ...

rename -n 's/^[0-9]+ - //' *

Supprimez -n après le test pour renommer les fichiers

Explication

  • s/old/new/ remplace old avec new
  • ^ début de chaîne
  • [0-9]+ certains nombres
réponse donnée Zanna 19.01.2017 - 09:03
la source
9

bash extension du paramètre pour supprimer la partie requise du début:

for f in *[[:blank:]]*.ogg; do echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done

Forme développée:

for f in *[[:blank:]]*.ogg; do 
    echo mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"
done

echo est pour la marche à sec; se débarrasser de lui pour l'action réelle:

for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done

Exemple:

% ls -1
1 - 01 - Hoffnung.ogg
2 - 02 - Familie.ogg

% for f in *[[:blank:]]*.ogg; do mv -i -- "$f" "${f#[[:digit:]]*-[[:blank:]]}"; done 

% ls -1                                                                             
01 - Hoffnung.ogg
02 - Familie.ogg
    
réponse donnée heemayl 19.01.2017 - 09:12
la source

Lire d'autres questions sur les étiquettes