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" :
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 ?
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"
Partager