Jelora.fr

Renommage seulement de dossiers/sous-dossiers et pas de fichiers en script bash

Dernièrement, j’ai voulu extraire la totalité de mes CDs au format Flac avec "abcde".
Je l’ai configuré pour qu’il mette des caractères underscores à la place des espaces dans les noms de fichiers et qu’il me rajoute l’année de sortie dans le nom du dossier représentant l’album.

OUTPUTFORMAT='${ARTISTFILE}/${YEAR} - ${ALBUMFILE}/${TRACKNUM}_-_${ARTISTFILE}_-_${TRACKFILE}'

VAOUTPUTFORMAT='_Various/${YEAR} - ${ALBUMFILE}/${TRACKNUM}_-_${ARTISTFILE}_-_${TRACKFILE}'


Problème : cette configuration se fait dans les paramètres de l’artiste et du nom de la piste, donc je me suis retrouvé avec des espaces remplacés par des caractères underscores dans les dossiers représentants les artistes. Comme ceci :
"Musiques/The_Sisters_of_Mercy/1993 - A_Slight_Case_of _Overbombing_Greatest_Hits_Volume_One/07_-_The_Sisters_of_Mercy_-_Lucretia_my_Reflection.flac"

Je me suis donc fait un petit script bash sous Linux qui me permet de renommer et retirer tous les caractères underscores des dossiers et des sous-dossiers tout en laissant les fichiers tels qu’ils sont.
Ce qui me permet d’obtenir un résultat comme ceci :
"Musiques/The Sisters of Mercy/1993 – A Slight Case of  Overbombing Greatest Hits Volume One/07_-_The_Sisters_of_Mercy_-_Lucretia_my_Reflection.flac"

Code:1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.

14.
15.
16.
17.
18.
19.
20.
21.
#!/bin/bash
clear

rename_folders(){
    local dossier=""
    local dossierSansUnderscore=""
    while IFS= read -r dossier;
    do
        if [[ -d "$1/$dossier" ]]; then
            dossierSansUnderscore="${dossier//_/ }"
           
            rename_folders "$1/$dossier"
            echo "--> $dossier -> $dossierSansUnderscore ($1/$dossier -> 
$1/$dossierSansUnderscore)" if [[ "$1/$dossier" != "$1/$dossierSansUnderscore" ]]; then mv "$1/$dossier" "$1/$dossierSansUnderscore" fi; fi; done < <(ls "$1") } rename_folders `pwd`

Petite explication : j’ai crée une fonction pour parcourir les dossiers et sous-dossiers de façon récursive tout en faisant le renommage en commençant par le sous-dossier le plus profond, comme dans l’exemple suivant :
- "Musiques/The_Sisters_of_Mercy/1993 - A_Slight_Case_of _Overbombing_Greatest_Hits_Volume_One"
- "Musiques/The_Sisters_of_Mercy"

En effet, il faut d’abord commencer par le dossier le plus profond puis ensuite remonter quand on veux faire des renommages en cascade.

Petit truc en plus, j’utilise des dossiers "spéciaux" pour ranger certains albums tous ensembles, comme les compilations.
Pour cela, j’ai nommé ce dossier en commençant par un caractère underscore (exemple : "_Various").
Mais je ne veux pas que mon script le modifie. J’ai modifié mon script pour ne fasse rien lorsqu’un dossier commence par un caractère underscore.

Code:1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.

18.
19.
20.
21.
22.
23.
24.
25.
#!/bin/bash
clear

rename_folders(){
    local dossier=""
    local dossierSansUnderscore=""
    while IFS= read -r dossier;
    do
        if [[ -d "$1/$dossier" ]]; then
            if [[ "${dossier:0:1}" != "_" ]]; then
                dossierSansUnderscore="${dossier//_/ }"
            else
                dossierSansUnderscore="$dossier"
            fi;
       
            rename_folders "$1/$dossier"
            echo "--> $dossier -> $dossierSansUnderscore ($1/$dossier -> 
$1/$dossierSansUnderscore)" if [[ "$1/$dossier" != "$1/$dossierSansUnderscore" ]]; then mv "$1/$dossier" "$1/$dossierSansUnderscore" fi; fi; done < <(ls "$1") } rename_folders `pwd`


Voilà, c’est un code du soir comme ça, je me suis dit que ça pourrait être utile à quelqu’un. :)

Ajouter un commentaire

Nom/Pseudo :

*

Email :

Site web :

Commentaire :

*

Vérification:


*