Прочитавши відповіді на це дуже цікаве запитання та зробивши кілька експериментів із SD-карткою для Android (exfat) та системою автомобільних розваг (vfat), я придумав цей маленький скриптовий сценарій.
#! /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
Він приймає призначення (точку монтування) як аргумент і використовує find
для пошуку всіх файлів у моєму музичному сховищі.
Для кожного шляху до файлу він обчислює шлях до пункту призначення та ім'я файлу, попередньо додаючи призначення та замінюючи будь-який образливий символ підкресленням _
. Я використовую білий список символів (літери, цифри, -
, /
, .
,
. (
, )
І _
) , щоб видалити будь-які небажані знаки пунктуації.
Залежно від місцевості, це залишать наголошені літери в шляху та імені файлу, що нормально для сучасних файлових систем FAT, як здається.
Для кожного шляху та імені файлу призначення каталоги створюються за потребою за допомогою mkdir -p
, потім файл копіюється, якщо він вже не існував.
Зверніть увагу на "
рядки цитат у різних місцях, вони зобов’язані утримувати шляхи та імена з пробілами в них не розбиватися.