Прочитав ответы на этот очень интересный вопрос и поэкспериментировав с SD-картой для Android (exfat) и автомобильной развлекательной системой (vfat), я придумал этот маленький скрипт 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
Он принимает пункт назначения (точку монтирования) в качестве аргумента и использует find
для поиска всех файлов в моем музыкальном хранилище.
Для каждого пути к файлу он вычисляет путь назначения и имя файла, добавляя место назначения и заменяя любой символ, вызывающий оскорбления, подчеркиванием _
. Я использую белый список символов (буквы, цифры, -
, /
, .
,
. (
, )
И _
) , чтобы удалить любые нежелательные знаки препинания.
В зависимости от локали, это оставит акцентированные буквы в пути и имени файла, что нормально для современных файловых систем FAT, как кажется.
Для каждого пути и имени файла назначения каталоги создаются по мере необходимости mkdir -p
, затем файл копируется, если он уже не существовал.
Обратите внимание на "
символы в кавычках в разных местах, они необходимы, чтобы пути и имена с пробелами в них не разрывались.