Dopo aver letto le risposte a questa domanda molto interessante e aver fatto alcuni esperimenti con la scheda SD per Android (exfat) e un sistema di intrattenimento per auto (vfat), mi sono imbattuto in questo piccolo 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
Prende la destinazione (punto di mount) come argomento e usa find
per trovare tutti i file nel mio repository musicale.
Per ogni percorso del file, calcola un percorso di destinazione e il nome del file anteponendo la destinazione e sostituendo qualsiasi carattere incriminato con un trattino basso _
. Uso una lista bianca di caratteri (lettere, cifre, -
, /
, .
,
. (
, )
e _
) per rimuovere eventuali segni di punteggiatura indesiderati.
A seconda delle impostazioni locali, questo lascerà lettere accentate nel percorso e nel nome del file, il che è OK per i moderni file system FAT, come sembra.
Per ogni percorso e nome del file di destinazione, le directory vengono create secondo necessità utilizzando mkdir -p
, quindi il file viene copiato, a meno che non sia già esistito.
Nota la citazione "
i caratteri in vari luoghi, sono tenuti a mantenere percorsi e nomi con spazi in essi da rompere a parte.