Depois de ler as respostas para essa pergunta muito interessante e fazer algumas experiências com o cartão SD para Android (exfat) e um sistema de entretenimento para carros (vfat), eu vim com esse pequeno script do 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
Ele pega o destino (ponto de montagem) como argumento e usa find
para localizar todos os arquivos no meu repositório de música.
Para cada caminho de arquivo, ele calcula um caminho de destino e um nome de arquivo, acrescentando o destino e substituindo qualquer caractere incorreto por um sublinhado _
. Eu uso uma lista branca de caracteres (letras, números -
, /
, .
,
. (
, )
E _
) para remover qualquer pontuação indesejada.
Dependendo da localidade, isso deixará letras acentuadas no caminho e no nome do arquivo, o que é bom para os sistemas de arquivos FAT modernos, ao que parece.
Para cada caminho e nome do arquivo de destino, os diretórios são criados conforme necessário mkdir -p
, e o arquivo é copiado, a menos que já exista.
Observe os "
caracteres de cotação em vários lugares; eles são obrigados a impedir que caminhos e nomes com espaços neles se separem.