Después de leer las respuestas a esta pregunta muy interesante y experimentar un poco con la tarjeta SD para Android (exfat) y un sistema de entretenimiento para el automóvil (vfat), se me ocurrió este pequeño script 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
Toma el destino (punto de montaje) como argumento y lo usa find
para localizar todos los archivos en mi repositorio de música.
Para cada ruta de archivo, calcula una ruta de destino y un nombre de archivo anteponiendo el destino y reemplazando cualquier carácter ofensivo con un guión bajo _
. Yo uso una lista blanca de caracteres (letras, dígitos -
, /
, .
,
. (
, )
E _
) para eliminar cualquier puntuacion no deseado.
Dependiendo de la configuración regional, esto dejará letras acentuadas en la ruta y el nombre del archivo, lo cual está bien para los sistemas de archivos FAT modernos, como parece.
Para cada ruta y nombre de archivo de destino, los directorios se crean según sea necesario usando mkdir -p
, luego el archivo se copia, a menos que ya exista.
Tenga en cuenta los "
caracteres de comillas en varios lugares, son necesarios para evitar que las rutas y los nombres con espacios se separen.