Nachdem ich die Antworten auf diese sehr interessante Frage gelesen und mit SD-Karten für Android (exfat) und einem Auto-Unterhaltungssystem (vfat) experimentiert hatte, kam ich zu diesem kleinen Bash-Skript.
#! /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
Es nimmt das Ziel (Mount-Punkt) als Argument und verwendet es find, um alle Dateien in meinem Musik-Repository zu lokalisieren.
Für jeden Dateipfad werden ein Zielpfad und ein Dateiname berechnet, indem das Ziel vorangestellt wird und jedes fehlerhafte Zeichen durch einen Unterstrich ersetzt wird _. Ich benutze eine weiße Liste von Zeichen (Buchstaben, Ziffern, -, /, ., . (, )Und _) jede unerwünschte Zeichensetzung zu entfernen.
Abhängig vom Gebietsschema verbleiben akzentuierte Buchstaben im Pfad und im Dateinamen, was für moderne FAT-Dateisysteme anscheinend in Ordnung ist.
Für jeden Zieldateipfad und -namen werden die Verzeichnisse nach Bedarf mit erstellt mkdir -p. Anschließend wird die Datei kopiert, sofern sie nicht bereits vorhanden ist.
Beachten Sie die Anführungszeichen "an verschiedenen Stellen, damit Pfade und Namen mit Leerzeichen nicht auseinander brechen.