Po przeczytaniu odpowiedzi na to bardzo interesujące pytanie i przeprowadzeniu eksperymentów z kartą SD dla Androida (exfat) i samochodowym systemem rozrywki (vfat), wymyśliłem ten mały skrypt 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
Bierze miejsce docelowe (punkt montowania) jako argument i służy find
do lokalizowania wszystkich plików w moim repozytorium muzycznym.
Dla każdej ścieżki pliku oblicza ścieżkę docelową i nazwę pliku, poprzedzając miejsce docelowe i zastępując każdy znak obrażający znakiem podkreślenia _
. Używam białą listę znaków (litery, cyfry, -
, /
, .
,
. (
, )
I _
), aby usunąć niechciane znaki interpunkcyjne.
W zależności od ustawień regionalnych pozostawi to litery akcentowane w ścieżce i nazwie pliku, co wydaje się odpowiednie dla nowoczesnych systemów plików FAT, jak się wydaje.
Dla każdej ścieżki i nazwy pliku docelowego katalogi są tworzone w razie potrzeby za pomocą mkdir -p
, a następnie plik jest kopiowany, chyba że już istniał.
Zanotuj "
znaki cudzysłowu w różnych miejscach, są one wymagane, aby ścieżki i nazwy ze spacjami nie rozpadały się.