Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/01/2020, à 20:21

diesel

[RESOLU] Forcer l'écriture sur une clé USB

Bonsoir,

Je me prépare une clé USB formatée en VFAT contenant des fichiers audio encodés en FLAC pour l'utiliser sur mon autoradio.

Celui-ci lit les répertoires (un par album) dans l'ordre de leur apparition dans le répertoire.

J'ai écrit un script qui fait ça mais ça ne marche pas tout à fait.

Je soupçonne le cache de me mettre un peu le bazar.

D'où ma question : Y a-t-il un moyen pour forcer les écritures sur la clé à chaque création de répertoire et à chaque création d'un fichier ?

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 20/01/2020, à 22:46)


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 19/01/2020, à 20:44

kamaris

Re : [RESOLU] Forcer l'écriture sur une clé USB

La commande sync ?
Mais c'est un peu bizarre comme histoire…
Qu'entends-tu par « ça ne marche pas tout à fait » ?

Hors ligne

#3 Le 19/01/2020, à 21:09

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Ben..., sur l'autoradio, je n'ai pas tout à fait les répertoires dans l'ordre dans lequel je les ai créés.

J'ai un peu cherché l'organisation d'un système de fichiers VFAT mais je n'ai rien trouvé de suffisamment détaillé pour pouvoir trouver l'ordre des répertoires sur  la clé et confirmer (ou non) mon hypothèse.

Je vais essayer de faire tourner le script avec un sync après chaque création de répertoire et écriture de fichier et voir ce que ça donne.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 19/01/2020, à 21:15)


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

#4 Le 19/01/2020, à 21:20

kamaris

Re : [RESOLU] Forcer l'écriture sur une clé USB

L'autoradio affiche les répertoires dans l'ordre croissant des dates de création ?
Si tel est le cas, tu ferais mieux de mettre un sleep 1 entre chaque création pour assurer qu'ils soient bien distingués, car le système de fichiers fat32 n'est pas précis au-delà de la seconde.

EDIT : pas tellement vrai en fait : c'est 10 ms pour la création, et 2 s pour la modification / effacement (https://fr.wikipedia.org/wiki/FAT32#Lim … s_de_FAT32), d'où le fait qu'on met --modify-window=1 quand on utilise rsync sur du fat32 : « Specifying 1 is useful for copies to/from MS Windows FAT filesystems, because FAT represents times with a 2-second resolution (allowing times to differ from the original by up to 1 second). »

Dernière modification par kamaris (Le 19/01/2020, à 21:33)

Hors ligne

#5 Le 20/01/2020, à 07:23

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Je ne sais pas si c'est la date de création ou l'ordre dans lequel ils apparaissent dans le répertoire, mais c'est une bonne suggestion.

Je pense que je vais faire les deux (sync et sleep 2).

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

#6 Le 20/01/2020, à 13:29

kamaris

Re : [RESOLU] Forcer l'écriture sur une clé USB

Quand tu parles de l'ordre dans lequel les répertoires apparaissent, je suppose alors que tu parles d'ordre alphabétique ?
Si tel est le cas, attention aux éventuels caractères non ascii : si l'autoradio ne les comprend pas, ça peut changer l'ordre.

Hors ligne

#7 Le 20/01/2020, à 13:36

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Non, ce n'est pas l'ordre alphabétique (ce serait trop simple).

C'est soit l'ordre dans lequel les répertoires et fichiers apparaissent dans la table VFAT, soit la date.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 20/01/2020, à 13:38)


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

#8 Le 20/01/2020, à 13:39

kamaris

Re : [RESOLU] Forcer l'écriture sur une clé USB

Mais alors, que signifie cette phrase de ton premier post : « [L'autoradio] lit les répertoires (un par album) dans l'ordre de leur apparition dans le répertoire. »
De quel ordre parles-tu ?

EDIT : messages croisés wink

Dernière modification par kamaris (Le 20/01/2020, à 13:41)

Hors ligne

#9 Le 20/01/2020, à 17:30

MicP

Re : [RESOLU] Forcer l'écriture sur une clé USB

Bonjour

diesel a écrit :

…J'ai écrit un script qui fait ça mais ça ne marche pas tout à fait.…

En voyant le contenu du script,
il sera sans doute possible de savoir d'où vient le problème et de proposer une solution.

Hors ligne

#10 Le 20/01/2020, à 17:36

erresse

Re : [RESOLU] Forcer l'écriture sur une clé USB

Salut,
À tout hasard, est-ce que l'autoradio ne tiendrait pas compte des métadonnées pour lire dans l'ordre des titres, ou un truc comme ça ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#11 Le 20/01/2020, à 19:02

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Bonsoir Erresse,

Je ne pense pas parce que ça lit vraiment dans le désordre (je viens d'installer l'autoradio donc je n'ai pas encore beaucoup écouté, mais je pense que je n'ai jamais réussi à écouter un album en entier d'un coup et dans l'ordre, alors que je pense que ce serait le cas avec les métadonnées).

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

#12 Le 20/01/2020, à 19:06

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

MicP a écrit :

Bonjour

diesel a écrit :

…J'ai écrit un script qui fait ça mais ça ne marche pas tout à fait.…

En voyant le contenu du script,
il sera sans doute possible de savoir d'où vient le problème et de proposer une solution.

Bonsoir MicP,

Ben..., le script, il marche très bien.

Il me sort sur la console au fur et à mesure ce qu'il est en train de faire (et il le fait dans le bon ordre) et j'ai vérifié ; sur la clé, j'ai bien mes répertoires et dans chacun les bons fichiers.

Donc, je n'ai aucun doute de ce côté là.

Les seuls doutes concernent les dates des fichiers créés et l'ordre de leur "rangement" dans la table FAT.

A ce propos, est-ce que la commande "cp" conserve les dates d'origine des fichiers, en particulier en copiant vers une partition VFAT ?

[EDIT] Je viens de vérifier, le nouveau fichier a la date du "cp". Ce n'est donc pas ça. [/EDIT]

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 20/01/2020, à 19:14)


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

#13 Le 20/01/2020, à 19:34

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Bon, ce n'est pas une question de dates.

jean-marie@jean-marie:/media/jean-marie/F535-5F3C$ for i in ./*; do echo -n "$i : " ; date -r "$i"; done
./AC-DC_’74 Jailbreak : dimanche 8 décembre 2019, 15:58:14 (UTC+0100)
./AC-DC_Back in Black : dimanche 8 décembre 2019, 16:04:20 (UTC+0100)
./AC-DC_Ballbreaker : dimanche 8 décembre 2019, 16:11:42 (UTC+0100)
./AC-DC_Black Ice : dimanche 8 décembre 2019, 16:14:50 (UTC+0100)
./AC-DC_Blow Up Your Video : dimanche 8 décembre 2019, 16:08:58 (UTC+0100)
./AC-DC_Dirty Deeds Done Dirt Cheap : dimanche 8 décembre 2019, 16:00:00 (UTC+0100)
./AC-DC_Flick of the Switch : dimanche 8 décembre 2019, 16:06:10 (UTC+0100)
./AC-DC_Fly on the Wall : dimanche 8 décembre 2019, 16:07:04 (UTC+0100)
./AC-DC_For Those About to Rock (We Salute You) : dimanche 8 décembre 2019, 16:05:10 (UTC+0100)
./AC-DC_High Voltage : dimanche 8 décembre 2019, 15:59:10 (UTC+0100)
./AC-DC_Highway to Hell : dimanche 8 décembre 2019, 16:03:12 (UTC+0100)
./AC-DC_Let There Be Rock : dimanche 8 décembre 2019, 16:01:08 (UTC+0100)
./AC-DC_Powerage : dimanche 8 décembre 2019, 16:02:14 (UTC+0100)
./AC-DC_Stiff Upper Lip : dimanche 8 décembre 2019, 16:13:12 (UTC+0100)
./AC-DC_The Razors Edge : dimanche 8 décembre 2019, 16:10:22 (UTC+0100)
./AC-DC_Who Made Who : dimanche 8 décembre 2019, 16:08:00 (UTC+0100)
./Alexx & The Mooonshiners_Mooonset Mooonrise : dimanche 8 décembre 2019, 16:28:28 (UTC+0100)
./Alexx & The Mooonshiners_Things : dimanche 8 décembre 2019, 16:26:36 (UTC+0100)
./America_Alibi : dimanche 8 décembre 2019, 16:36:14 (UTC+0100)
./America_America : dimanche 8 décembre 2019, 16:29:40 (UTC+0100)
./America_Harbor : dimanche 8 décembre 2019, 16:34:34 (UTC+0100)
./America_Hat Trick : dimanche 8 décembre 2019, 16:31:08 (UTC+0100)
./America_Hearts : dimanche 8 décembre 2019, 16:32:56 (UTC+0100)
./America_Hideaway : dimanche 8 décembre 2019, 16:33:46 (UTC+0100)
./America_Holiday : dimanche 8 décembre 2019, 16:32:02 (UTC+0100)
./America_Homecoming : dimanche 8 décembre 2019, 16:30:30 (UTC+0100)
./America_Hourglass : dimanche 8 décembre 2019, 16:39:52 (UTC+0100)
./America_Human Nature : dimanche 8 décembre 2019, 16:41:12 (UTC+0100)
./America_Perspective : dimanche 8 décembre 2019, 16:38:46 (UTC+0100)
./America_Silent Letter : dimanche 8 décembre 2019, 16:35:30 (UTC+0100)
./America_View From The Ground : dimanche 8 décembre 2019, 16:37:12 (UTC+0100)
./America_Your Move : dimanche 8 décembre 2019, 16:37:58 (UTC+0100)
./Ange_Au-delà du délire : dimanche 8 décembre 2019, 16:43:40 (UTC+0100)
./Ange_Caricatures : dimanche 8 décembre 2019, 16:42:20 (UTC+0100)
./Ange_Emile Jacotey : dimanche 8 décembre 2019, 16:44:54 (UTC+0100)
./Ange_Guet-apens : dimanche 8 décembre 2019, 16:46:12 (UTC+0100)
./Ange_Le Cimetière des arlequins : dimanche 8 décembre 2019, 16:42:58 (UTC+0100)
./Ange_Par les fils de Mandrin : dimanche 8 décembre 2019, 16:45:28 (UTC+0100)
./Ange_Vu d'un chien : dimanche 8 décembre 2019, 16:47:04 (UTC+0100)
./Angry_Blood From Stone : dimanche 8 décembre 2019, 16:48:18 (UTC+0100)
./Aphrodite’s Child_666 : dimanche 8 décembre 2019, 16:49:58 (UTC+0100)
./Bryan Adams_18 Til I Die : dimanche 8 décembre 2019, 16:22:58 (UTC+0100)
./Bryan Adams_Bryan Adams : dimanche 8 décembre 2019, 16:15:36 (UTC+0100)
./Bryan Adams_Cuts Like a Knife : dimanche 8 décembre 2019, 16:16:38 (UTC+0100)
./Bryan Adams_Into the Fire : dimanche 8 décembre 2019, 16:19:32 (UTC+0100)
./Bryan Adams_On a Day Like Today : dimanche 8 décembre 2019, 16:24:10 (UTC+0100)
./Bryan Adams_Reckless : dimanche 8 décembre 2019, 16:18:38 (UTC+0100)
./Bryan Adams_Room Service : dimanche 8 décembre 2019, 16:25:18 (UTC+0100)
./Bryan Adams_Waking Up the Neighbours : dimanche 8 décembre 2019, 16:21:30 (UTC+0100)
./Bryan Adams_You Want It You Got It : dimanche 8 décembre 2019, 16:17:34 (UTC+0100)
jean-marie@jean-marie:/media/jean-marie/F535-5F3C$

Tous les répertoires ont des date/heure bien différentes et celles-ci sont bien dans le bon ordre (dans le listing fourni, les albums sont classés par ordre alphabétique et pas par ordre de parution).
Pourtant, lorsque j'ai inséré la clé pour la première fois dans l'autoradio, il a commencé par un titre de l'album 666 d'Aphrodite's child (et pas le premier de l'album), puis il est passé à un titre d'AC/DC.

C'est à ne rien y comprendre.

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

#14 Le 20/01/2020, à 20:38

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Bon, je viens de relire la doc : https://www.jvc.net/cs/car/audiofile/in … =KD-X341BT

Il semblerait que ce soit par ordre alphabétique. Je vais essayer et pour l'instant, je mets en standby.

En tous cas, merci à ceux qui ont essayé de m'aider.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 20/01/2020, à 20:40)


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

#15 Le 20/01/2020, à 20:38

kamaris

Re : [RESOLU] Forcer l'écriture sur une clé USB

Y'a pas une option « lecture aléatoire » défois, sur ton autoradio ? big_smile

Hors ligne

#16 Le 20/01/2020, à 20:38

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

kamaris a écrit :

Y'a pas une option « lecture aléatoire » défois, sur ton autoradio ? big_smile

Non, ça, j'ai vérifié. wink big_smile

Enfin, pour être précis, cette option existe mais elle est désactivée.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 20/01/2020, à 20:41)


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

#17 Le 20/01/2020, à 22:50

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Finalement, j'ai mal analysé le comportement de mon autoradio (bon, sur moins de 24h wink ).

Il gère bien les dossiers et fichiers par ordre alphabétique.

J'ai donc modifié mon script pour avoir deux chiffres au début de chaque nom sous la forme, par exemple, 01 - AC-DC et ça marche.

Encore merci à ceux qui m'ont répondu.

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

#18 Le 20/01/2020, à 23:38

kamaris

Re : [RESOLU] Forcer l'écriture sur une clé USB

Ça doit plutôt être un ordre numérique alors (s'il lit bien le second titre avant le dixième) :

$ echo -e "1\n10\n2" | sort
1
10
2
$ echo -e "1\n10\n2" | sort -n
1
2
10
$ 

Hors ligne

#19 Le 21/01/2020, à 07:08

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Non, parce que c'est numéroté :
01
02
03
04
05
06
07
08
09
10
11
...

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

#20 Le 21/01/2020, à 10:03

iznobe

Re : [RESOLU] Forcer l'écriture sur une clé USB

Salut ,

dans ce cas il vaudrait mieux commencer par " 0001 " , car vous aurez certainement plus de 100 fichiers sur votre clé , et autant etre prevoyant si un jour vous changez de clé et en prenez une qui peut contenir plus de 1000 morceaux (dossiers ) differents wink

Vous aurez alors a ce moment là juste une simple copie a faire , puis y ajouter les suivants .

Dernière modification par iznobe (Le 21/01/2020, à 10:03)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#21 Le 21/01/2020, à 14:21

kamaris

Re : [RESOLU] Forcer l'écriture sur une clé USB

Si l'entrée dans un nouveau répertoire réinitialise bien la numérotation (du point de vue de l'autoradio), alors la numérotation à deux chiffres peut suffire.
Mais je trouve que c'est pas clair dans la doc citée par diesel en #14, car il prennent justement un exemple où on continue à incrémenter la numérotation des chansons en changeant de répertoire…
Du coup je me suis demandé : l'autoradio en a-t-il vraiment quelque chose à faire des répertoires ? les voit-il seulement ?

Hors ligne

#22 Le 21/01/2020, à 16:06

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Oui, il gère bien les répertoires et la numérotation reprend bien à 01 dans chaque répertoire (en commençant par le répertoire racine).

J'ai les boutons << et >> qui me permettent de passer d'un titre à un autre et les touches 1 et 2 qui me permettent de changer de répertoire.

Pour garnir la clé (enfin, les clés, parce qu'il va y en avoir au moins 6 de 64GB), j'ai créé un fichier (en fait, 6 ou 7 au total) qui contient une partie du ls -R du répertoire Musique de mon PC.

A partir de ça, j'ai un script qui me crée sur la clé un premier niveau de répertoire avec les artistes, dans chaque répertoire artiste, des répertoires album et dans chaque répertoire album, les titres au format FLAC. A chaque niveau, la numérotation commence à 01. J'aurai moins de 100 artistes sur une clé, chacun a fait moins de 100 albums et chaque album contient moins de 100 titres.

Dans la doc, ce ne sont pas les numéros des répertoires et morceaux, mais l'ordre de lecture.

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 21/01/2020, à 16:12)


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

#23 Le 21/01/2020, à 17:31

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

MicP a demandé une copie du script.

Je vais probablement me faire assassiner par Watael sur la qualité de mon code s'il passe par là, mais tant-pis. wink lol

Le fichier de description des répertoires et fichiers à copier :

Musique:
Alexx & The Mooonshiners
Angry
Aphrodite’s Child
Aṣa
Ayọ

Musique/Alexx & The Mooonshiners:
01 - Things
02 - Mooonset Mooonrise

Musique/Alexx & The Mooonshiners/01 - Things:
01 - Bipolar.flac
02 - Gotta Be Yours.flac
03 - Hot For Teacher.flac
04 - Runaway.flac
05 - Anarchy In The U.K..flac
06 - Questions I Can't Answer.flac
07 - Indian.flac
08 - Things Are Going Right For Me.flac
09 - Mickey.flac
10 - Andrew Jones.flac
11 - On Est Des Mooons.flac
12 - Worms In My Woman.flac

Musique/Alexx & The Mooonshiners/02 - Mooonset Mooonrise:
01 - Not The Best.flac
02 - All This To You.flac
03 - L.I.T.O.L.M..flac
04 - Woofriii.flac
05 - I'm Going Fishing (part I).flac
06 - Rhum Eau A Cuba.flac
07 - I'm Going Fishing (part II).flac
08 - Comfortably Numb.flac
09 - Come On.flac
10 - We Float.flac
01 - Strange.flac
02 - Memories Of A Dark Island.flac
03 - Witless.flac
04 - Should I Stay Or Should I Go.flac
05 - Well Done.flac
06 - Emperor's Boogie.flac
07 - Silver Unicorn.flac
08 - Alisona.flac
09 - L.I.C.T.T.Y..flac
10 - Faithfull Dream.flac
11 - B.I.M.S..flac

Musique/Angry:
01 - Blood From Stone

Musique/Angry/01 - Blood From Stone:
01 - Bound For Glory.flac
02 - Wild Boys.flac
03 - Heaven.flac
04 - Stone Cold.flac
05 - Fire And Water.flac
06 - Born Survivor.flac
07 - Motorbike Song.flac
08 - Love from Ashes.flac
09 - Born To Be Wild.flac
10 - Bad Days.flac

Musique/Aphrodite’s Child:
01 - 666

Musique/Aphrodite’s Child/01 - 666:
01 - The System.flac
02 - Babylon.flac
03 - Loud, Loud, Loud.flac
04 - The Four Horsemen.flac
05 - The Lamb.flac
06 - The Seventh Seal.flac
07 - Aegian Sea.flac
08 - Seven Bowls.flac
09 - The Wakening Beast.flac
10 - Lament.flac
11 - The Marching Beast.flac
12 - The Battle of Locusts.flac
13 - Do It.flac
14 - Tribulation.flac
15 - The Beast.flac
16 - OFIS.flac
01 - Seven Trumpets.flac
02 - Altamont.flac
03 - The Wedding of the Lamb.flac
04 - The Capture of the Beast.flac
05 - ∞.flac
06 - Hic et Nunc.flac
07 - All the Seats Were Occupied.flac
08 - Break.flac

Musique/Aṣa:
01 - Aṣa
02 - Beautiful Imperfection

Musique/Aṣa/01 - Aṣa:
01 - Jailer.flac
02 - 360°.flac
03 - Bi’ban ké.flac
04 - Subway.flac
05 - Fire on the Mountain.flac
06 - Eyé àdabá.flac
07 - No One Knows.flac
08 - Awé.flac
09 - Peace.flac
10 - So Beautiful.flac

Musique/Aṣa/02 - Beautiful Imperfection:
01 - Why Can't We.flac
02 - Maybe.flac
03 - Be My Man.flac
04 - Preacher Man.flac
05 - Bimpé.flac
06 - The Way I Feel.flac
07 - OK OK.flac
08 - Dreamer Girl.flac
09 - Oré.flac
10 - Baby Gone.flac
11 - Broda Olé.flac
12 - Questions.flac

Musique/Ayọ:
01 - Joyful
02 - Gravity at Last

Musique/Ayọ/01 - Joyful:
01 - Down on My Knees.flac
02 - Without You.flac
03 - Letter by Letter.flac
04 - How Many Times.flac
05 - And It’s Supposed to Be Love.flac
06 - Watching You.flac
07 - Only You.flac
08 - Help Is Coming.flac
09 - These Days.flac
10 - Life Is Real.flac
11 - What Is Love.flac
12 - Neva Been.flac

Musique/Ayọ/02 - Gravity at Last:
01 - I Am Not Afraid.flac
02 - Maybe (Ayo Blues).flac
03 - Slow Slow (Run Run).flac
04 - Love and Hate.flac
05 - Get Out of My Way.flac
06 - Better Days.flac
07 - Change.flac
08 - Piece of Joy.flac
09 - Lonely.flac
10 - Sometimes.flac
11 - What’s This All About.flac
12 - Mother.flac
13 - Thank You.flac

On peut voir que deux albums sont composés de deux disques avec la numérotation du deuxième disque qui repart à 01.

Et le script :

#!/bin/bash

# La variable "dummy" non vide permet de juste faire un essai sans créer les répertoires ni copier les fichiers
dummy=""

# Teste les paramètres

if [ $1 = "-d" ]

then

	dummy=1

	shift 1

fi

if [ $# != 2 ]

then

	echo "Usage : music_copy.sh [-d](dummy) <fichier de description des fichiers à copier> <périphérique de destination>"

	exit 1

fi

fichier_description=$1
peripherique_destination=$2
mon_home="/home/jean-marie"

if [ ! -f "$fichier_description" ]

then

	echo "le fichier "$fichier_description" n'existe pas"

	exit 1

fi

if [ ! "${peripherique_destination:0:5}" = "/dev/" ]

then

	echo $peripherique_destination" ne désigne pas un périphérique"

	exit 1

fi

if [ ! -e "$peripherique_destination" ]

then

	echo "Le périphérique "$peripherique_destination" n'existe pas"

	exit 1

fi

if [ ! -b "$peripherique_destination" ]

then

	echo "Le périphérique "$peripherique_destination" n'est pas un périphérique de type bloc"

	exit 1

fi

destination=$(mount | grep "$peripherique_destination" | cut -d' ' -f3)

if [ -z "$destination" ]

then

	echo "Le périphérique "$peripherique_destination" n'est pas monté"

	exit 1

fi

musique=$(sed -n -e "s/://" -e "1  p" $fichier_description)

ligne_artiste=2
artiste=$(sed -n "$ligne_artiste p" $fichier_description)
numero_artiste=1

# Boucle sur les artistes

while [ ! -z "$artiste" ]

do

	source_artiste="$musique"/"$artiste":

# Enlève les éventuels caractères interdits par le format VFAT dans le nom des fichiers
	artiste="${artiste//[\/\\\"?:]/}"

	destination_artiste="$destination"/$(printf "%02d" $numero_artiste)" - ""$artiste"

	echo "Création du répertoire $destination_artiste"

	if [ -z $dummy ] ; then mkdir "${destination_artiste}" ; fi

	((ligne_album=$(grep -n "$source_artiste" $fichier_description | cut -d: -f1)+1))
	album=$(sed -n "$ligne_album p" $fichier_description)

# Boucle sur les albums

	while [ ! -z "$album" ]

	do

		source_album="${source_artiste:0:$((${#source_artiste}-1))}"/"$album"":"

# Enlève les éventuels caractères interdits par le format VFAT dans le nom des fichiers
		album="${album//[\/\\\"?:]/}"

		destination_album="$destination_artiste"/"$album"

		echo "Création du répertoire $destination_album"

		if [ -z $dummy ] ; then mkdir "${destination_album}" ; fi

		((ligne_titre=$(grep -n "$source_album" $fichier_description | cut -d: -f1)+1))
		titre=$(sed -n "$ligne_titre p" $fichier_description)

# La variable numero_titre permet d'avoir une numérotation croissante de titres pour les albums à plusieurs disques
		numero_titre=1

# Boucle sur les titres

		while [ ! -z "$titre" ]

		do

			source_titre="$mon_home""/""${source_album:0:$((${#source_album}-1))}""/""$titre"

# Enlève les éventuels caractères interdits par le format VFAT dans le nom des fichiers
			titre="${titre//[\/\\\"?:]/}"

			destination_titre="$destination_album"/$(printf "%02d" $numero_titre)" - ""${titre:5}"

			echo "Création du fichier $destination_titre"

			if [ -z $dummy ] ; then cp "${source_titre}" "${destination_titre}" ; fi

			((ligne_titre++))
			titre=$(sed -n "$ligne_titre p" $fichier_description)
			((numero_titre++))

# Fin de la boucle sur les titres

		done

		((ligne_album++))
		album=$(sed -n "$ligne_album p" $fichier_description)

# Fin de la boucle sur les albums

	done

	((ligne_artiste++))
	artiste=$(sed -n "$ligne_artiste p" $fichier_description)
	((numero_artiste++))

# Fin de la boucle sur les artistes

done

exit 0

Amicalement.

Jean-Marie

Dernière modification par diesel (Le 21/01/2020, à 17:38)


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

#24 Le 22/01/2020, à 02:52

kamaris

Re : [RESOLU] Forcer l'écriture sur une clé USB

Globalement, l'usage des guillemets doubles est à revoir : tu peux utiliser shellcheck pour qu'il te dise où (avec d'instructives lectures en bonus).
Le point le plus problématique est peut-être ce genre de ligne :

echo "Le périphérique "$peripherique_destination" n'existe pas"

où la variable que tu penses mettre entre guillemets, tu la sors en fait précisément des guillemets.
Ici c'est pour utiliser echo, donc c'est pas grave, mais dans d'autres cas ça peut être piégeux, alors qu'il suffit de faire

echo "Le périphérique $peripherique_destination n'existe pas"

Il y a pas mal d'autres endroits où une suite de guillemets doubles pourraient être remplacés par une simple paire, et d'autres où ils manquent (autour de « $fichier_description » souvent).

Hors ligne

#25 Le 22/01/2020, à 07:34

diesel

Re : [RESOLU] Forcer l'écriture sur une clé USB

Effectivement, j'ai allègrement parsemé de guillemets doubles.

La raison est que, notamment dans les titres, je ne maîtrise pas les caractères ou les mots qui vont être rencontrés et que je veux me prémunir de toute interprétation inopinée par le shell.

Par contre, pour les variables dans les "echo" au début du script, ce n'est pas un oubli ou une erreur de ma part, même si ça peut être une erreur sur le fond ; je n'ai simplement pas eu de doute sur une possible interprétation par le shell de ce qui peut être entré dans le champ "périphérique".

Et merci pour la découverte (pour moi) de shellcheck. Je crois que j'en ai besoin et que je vais en faire bon usage.

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