Renommage en masse avec bash !

20 avril 2013 0
Attention ! Ce post a plus de 1 an, ce qui signifie qu'il n'est pas forcément à jour !

Je sais pas vous, mais si vous avez pas mal de scan (par exemple, ceux de One Piece), vous pouvez souhaiter de renommer tous ces fichiers plutôt que d’aller et venir entre chaque dossier.

Prenons par exemple ce système de fichier :

.
|-- [MFT] One Piece 662
|   |-- 00.jpg
|   |-- ******
|   |-- 19.jpg
|   `-- Recrutement.jpg
|-- [MFT] One Piece 664
|   |-- 00.jpg
|   |-- ******
|   `-- 18.jpg
|-- [MFT] One Piece 665
|   |-- 00.jpg
|   |-- ******
|   `-- 17.jpg
|-- [MFT] One Piece 666
|   |-- 00.jpg
|   |-- ******
|   |-- 17.jpg
|   `-- Recrutement.jpg
|-- [MFT] One Piece 669
|   |-- 00.jpg
|   |-- ******
|   |-- 16.jpg
|   `-- 17.jpg
|-- One Piece 667 FRENCH eBook-MFT
|   |-- 00.jpg
|   |-- ******
|   `-- 19.jpg
|-- One Piece 668 FRENCH eBook-MFT
|   |-- 00.jpg
|   |-- ******
|   |-- 17.jpg
|   `-- 18-19.jpg
|-- One Piece 670 FRENCH eBook-MFT
|   |-- 00.jpg
|   |-- ******
|   `-- 17.jpg
|-- One Piece 671 FRENCH eBook-MFT
|   |-- 00.jpg
|   |-- ******
|   `-- 17.jpg
|-- One Piece 672 FRENCH eBook-MFT
|   |-- 00.jpg
|   |-- ******
|   `-- 18-19.jpg
|-- One Piece 673 FRENCH eBook-MFT
|   |-- 00.jpg
|   |-- ******
|   `-- 19.jpg
|-- One Piece 674 FRENCH eBook-MFT
|   |-- 00.jpg
|   |-- ******
|   |-- 17.jpg
|   `-- Recrutement.jpg
|-- One Piece 675 FRENCH eBook-MFT
|   |-- 00.jpg
|   |-- ******
|   `-- 18-19.jpg
|-- One Piece 676 FRENCH eBook
|   |-- 00.jpg
|   |-- ******
|   `-- 19.jpg
|-- One Piece 677 FRENCH eBook
|   |-- 01.jpg
|   |-- ******
|   `-- 18-19.jpg
|-- One Piece 678 FRENCH eBook
|   |-- 00.jpg
|   |-- ******
|   `-- 17.jpg
|-- One Piece 679 FRENCH eBook
|   |-- 01.jpg
|   |-- ******
|   `-- 19.jpg
|-- One Piece 680 FRENCH eBook
|   |-- 00.jpg
|   |-- ******
|   `-- 18-19.jpg
|-- One Piece 681 FRENCH eBook
|   |-- 01.jpg
|   |-- 02.jpg
|   |-- 03.jpg
|   |-- 04.jpg
|   |-- 05.jpg
|   |-- 06.jpg
|   |-- 07.jpg
|   |-- 08.jpg
|   |-- 09.jpg
|   |-- 10.jpg
|   |-- 11.jpg
|   |-- 12.jpg
|   |-- 13.jpg
|   |-- 14.jpg
|   |-- 15.jpg
|   |-- 16.jpg
|   |-- 17.jpg
|   |-- 18.jpg
|   `-- 19.jpg

******

|-- [O.P.S] One Piece 663
|   |-- 00.jpg
|   |-- ******
|   `-- 19.jpg

On remarque que c’est pas super top pour la lecture. Les dossiers ne sont pas dans l’ordre, le noms des fichiers sont uniquement « 01-02 ** », ce qui n’est pas super pratique pour savoir où est-ce qu’on en en est.

Dans l’idée, le « script » que je vais vous donner permet de renommer dans ce sens :

  • Pour chacun des dossiers, 
  • On prends le dossier en cours, on récupère son numéro de chapitre grâce à un grep + regexp
  • On renomme ce dossier avec le numéro qu’on a récupéré
  • Puis pour chacun des fichiers de ce dossier
  • On récupère le nom du fichier
  • On le renomme avec le numéro du dossier + l’ancien nom de fichier

Et voilà ! Voici la commande que j’ai crée :

for d in ./* ; do number=$(grep -oE "[[:digit:]]{1,}" <<< $d); mv $d $number; for f in $number/* ; do file=$(echo $f | xargs -n 1 basename); mv $f "$number/$number-$file" ; done ; done ;