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.