#1 Le 23/01/2025, à 15:13
- diesel
[RÉSOLU] Amélioration script
Bonjour,
J'ai rédigé un script pour copier des fichiers de musique (format .flac) présents dans le ssd de données de mon PC vers un support amovible.
Pour ce faire, j'utilise un fichier qui me donne la liste des artistes dont je veux copier la musique (disons un fichier : "toto") Ce fichier contient simplement une ligne par artiste avec son prénom et son nom (ou le nom du groupe). Par exemple :
Adamo
Claude François
Serge Gainsbourg
.
.
.
Ringo Willy Cat
The Rubettes
Sheila
Sylvie Vartan
Le nombre d'artistes peut être supérieur à 100.
Pour être certain que les artistes soient lus dans le bon ordre dans le support amovible, je crée un répertoire pour chaque artiste avec son nom précédé d'un numéro (par exemple : "37 - The Rubettes").
Le fichier d'entrée (toto) est fourni en premier argument au script ($1) et le périphérique amovible est fourni en second argument ($2)
Pour ce faire, j'ai écrit le code suivant (extrait) :
fichier_description=$1
support_sortie=$2
nombre_artistes=$(wc -l $fichier_description | cut -d" " -f1)
numéro_artiste=1
# boucle sur les artistes
while read artiste
...
destination_artiste="$support_sortie"/$(printf "%0"${#nombre_artistes}"d" $numero_artiste)" - ""$artiste"
...
((numéro_artiste++))
done
Je me demande s'il n'y a pas moyen de faire plus simple (et éventuellement plus élégant) pour calculer le nombre d'artistes (3ème ligne dans l'extrait de script fourni) et utiliser ce nombre pour dimensionner le nombre de chiffres dans la chaîne de caractères de sortie (ligne : "destination_artiste...").
Précision : le temps d'exécution de ce script dépend essentiellement du temps passé à copier les fichiers musicaux. Je ne cherche donc pas à gagner sur le code de ce point de vue.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 23/01/2025, à 17:07)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#2 Le 23/01/2025, à 15:37
- sputnick
Re : [RÉSOLU] Amélioration script
Salut,
déjà:
nombre_artistes=$(wc -l < $fichier_description)
pour plus smart et concis
Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. Confucius
https://sputnick.fr
Hors ligne
#3 Le 23/01/2025, à 15:42
- Watael
Re : [RÉSOLU] Amélioration script
#!/bin/bash
#TODO: Vérifier arguments...
ficDesc=$1
extDev=$2
mapfile -O 1 -t liste <"$ficDesc"
nbArtists=${#liste[*]}
for i in "${!liste[@]}"
do
printf -v destArtist -- "$extDev/%0${nbArtists}d - %s" $i "${liste[i]}"
cp ~/"ringards/${liste[i]}" "$destArtist"
# :D
done
?
/!\ un nom de variable ne peut pas contenir d'accents.
Dernière modification par Watael (Le 23/01/2025, à 15:47)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 23/01/2025, à 16:39
- diesel
Re : [RÉSOLU] Amélioration script
Merci sputnick et Watael.
@Watael : dans la ligne "printf...", ne te manque-t-il pas un # dans ${nbArtists} ?
Cordialement.
Jean-Marie
P.S. pour l'accent, comme j'ai l'habitude d'écrire en français, c'est juste une ligne que j'ai refrappée au lieu de la copier/coller. Dans le vrai script, il n'y a pas d'accent. Voir d'ailleurs la ligne : "destination_artiste..." qui a été copiée/collée et qui ne contient pas d'accent, elle.
PS-2 C'est quoi le -- dans la commande printf ?
PS-3 J'aime bien ta proposition : "cp ~/...".
Dernière modification par diesel (Le 23/01/2025, à 16:45)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#5 Le 23/01/2025, à 16:58
- Watael
Re : [RÉSOLU] Amélioration script
dans la ligne "printf...", ne te manque-t-il pas un # dans ${nbArtists} ?
nbArtists=${#liste[*]}
C'est quoi le -- dans la commande printf ?
c'est pour indiquer la fin des options de printf, parce que le format contient un tiret, qui pourrait être pris comme une indication d'option.
ce n'est pas particulier à printf, ça sert pour toutes les commandes.
par exemple
$ > -monFichier
$ ls -l -- -monFichier
Dernière modification par Watael (Le 23/01/2025, à 16:59)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 23/01/2025, à 17:07
- diesel
Re : [RÉSOLU] Amélioration script
Merci beaucoup.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#7 Le 23/01/2025, à 20:19
- diesel
Re : [RÉSOLU] Amélioration script
#TODO: Vérifier arguments...
C'est fait depuis le début mais je n'ai pas posté ici parce que ce n'était pas la question.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne