Après avoir lu les réponses à cette question très intéressante et fait quelques expériences avec la carte SD pour Android (exfat) et un système de divertissement automobile (vfat), je suis venu avec ce petit script bash.
#! /bin/bash
DST=$1
# copy music to FAT media
find music/ Music/ -type f | while read f ; do
d=$DST/$( echo $f | sed 's/[^-A-Za-z0-9/._ ()]/_/g' )
echo :$d:
mkdir -p "$(dirname "$d")"
cp -n "$f" "$d"
done
Il prend la destination (point de montage) comme argument et utilise find
pour localiser tous les fichiers dans mon référentiel musical.
Pour chaque chemin de fichier, il calcule un chemin de destination et un nom de fichier en ajoutant la destination et en remplaçant tout caractère incriminé par un trait de soulignement _
. J'utilise une liste blanche de caractères (lettres, chiffres, -
, /
, .
,
. (
, )
Et _
) pour enlever toute ponctuation non désirée.
Selon les paramètres régionaux, cela laissera des lettres accentuées dans le chemin et le nom de fichier, ce qui est OK pour les systèmes de fichiers FAT modernes, comme il semble.
Pour chaque chemin et nom de fichier de destination, les répertoires sont créés selon les besoins à l'aide de mkdir -p
, puis le fichier est copié, sauf s'il existait déjà.
Notez les "
caractères de citation à divers endroits, ils sont nécessaires pour empêcher les chemins et les noms avec des espaces de se séparer.