Bonjour,

Pour chaque album que j'achète dans le commerce (2, 3 par mois), je les RIP sur mon PC en FLAC, les disques vont dans la voiture et les FLAC sur mon "NAS" afin d'y avoir accès sur n'importe quel PC sur mon réseau local.

Puis je me suis acheté récemment un baladeur numérique (SanDisk Sansa+) et bien qu'il lise les FLAC je prèfère y mettre un format lossy (OGG dans mon cas) pour économiser de la place.

Je souhaite donc me créer un script shell qui scruterai (via une ligne dans CRON) un répertoire donné en paramètre (la source de mes FLAC) et ira scruté le dossier OGG afin de créerait les OGG manquant à l'ajout de nouveaux FLAC.
Les arborescence sont de ce type :
/mnt/share/music/FLAC/Artiste/Album
/mnt/share/music/OGG/Artiste/Album

Pour info, mon "NAS" est un Pentium IV recycler avec Debian NetInstall et Samba et mon PC principal (Core i7) est sous Fedora LXDE.

J'aimerais approfondir mes connaissances en shell avec se besoin et voici un premier jet "qui marche" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/bin/bash
listfile() {
    #Sauvegarde de L'Internal Field Separator (Utile ???)
    SaveIFS=$IFS
    #Seprateur uniquement au saut de page
    IFS=$'\n'
    #Pour tout les fichiers du répertoire donné en paramètre
    for fichier in $(eval ls \"$1\"); do
        #Si c'est un fichier
        if [ -f "$1/$fichier" ]; then
            #Si le nom du fichier contient '.flac'
            if [ ${fichier##*.} == 'flac' ]; then
                #Détermination du nom complet du fichier cible
                local fileDest=$(replaceStr "$1/$fichier" "FLAC" "OGG")
                local fichier_flac=$1/$fichier
                fileDest=$(replaceStr "$fileDest" ".flac" ".ogg")
                #Recherche si fichier cible existant
                if [ ! -f "$fileDest" ]; then
                    echo "Compression de : "$fileDest
                    #On le compresse
                    oggenc "$fichier_flac" -q9
                    #On le met dans le repertoire OGG
                    fichier_ogg=$(replaceStr "$fichier_flac" ".flac" ".ogg")
                    mv "$fichier_ogg" "$fileDest"
                fi
            elif [ ${fichier##*.} == 'png' ] || [ ${fichier##*.} == 'jpg' ] || [ ${fichier##*.} == 'txt' ]; then
                #Détermination du nom complet du fichier cible
                local fileDest=$(replaceStr "$1/$fichier" "FLAC" "OGG")
                local fileSrc=$1/$fichier
                #Recherche si fichier cible existant
                if [ ! -f "$fileDest" ]; then
                    echo "Copie de : "$fileDest
                    #On copie le fichier
                    mv "$fileSrc" "$fileDest"
                fi
            fi
 
        #Si c'est un répertoire
        elif [ -d "$1/$fichier" ]; then
            local rep=$1/$fichier
            #Détermination du nom du répertoire cible
            local repDest=$(replaceStr "$rep" "FLAC" "OGG")
            #Si inexitant
            if [ ! -d "$repDest" ]; then
                echo "___KO : "$repDest
                #Création du répertoire
                eval mkdir \"$repDest\"
            fi
            #Appel récursif avec ce nouveau répertoire
            listfile "$rep"
        fi
    done
    #On réapplique le IFS sauvegardé (Utile ???)
    IFS=$SaveIFS
}
 
replaceStr(){
    local cible=$(echo $1 | sed -e "s/$2/$3/")
    echo $cible
}
 
source=$1
echo $source
 
listfile "$source"
C'est un premier jet écrit lors d'une codding night (oui j'ai galéré pour si peu) donc pas très beau mais voyez-vous des horreurs à me faire corriger ?