Quiero copiar una gran cantidad de archivos en una unidad USB con formato FAT32 (y desafortunadamente no se puede formatear nada más).
Muchos de estos archivos tienen nombres con caracteres como :
y ?
que FAT32 no permite. Intentando usar cp
o rsync
, estos archivos no se copian y se informa un error que lo indica.
No quiero cambiar el nombre de los archivos en la fuente, pero tampoco me importa cómo se les cambia el nombre a los archivos en la unidad USB de destino.
Aclaración sobre el propósito (se aplica también a los otros comentarios): Esto es para un reproductor de mp3 en un automóvil y el software solo permite FAT32. Entonces no es para propósitos de respaldo. Y las razones por las que los nombres de archivo tienen caracteres extraños es porque son, por ejemplo, títulos de mp3 o nombres de artistas.
He intentado un par de cosas:
--iconv
Opción de rsync . Esto no parecía funcionar, pero tal vez no lo usé correctamente.rdiff-backup
, que leí hace esta conversión de forma predeterminada. Sin embargo, los archivos de origen son enlaces simbólicos que quiero seguir (es decir, la-L
opción de rsync ), y de las páginas del manual no parece querdiff-backup
tenga esta opción.
¿Cualquier otra sugerencia?
rsync
la--iconv
opción no está hecha para lo que estás tratando de usar.--iconv
hace conversiones de juego de caracteres, por ejemplo, latin1 <-> utf8. No es lo que estás buscando.Respuestas:
Rsync con
--iconv
sería una opción, pero primero debe definir una codificación donde?
,:
y otras están codificadas con caracteres que están permitidos en los sistemas de archivos FAT.Para su caso de uso, no está utilizando todo el poder de rsync para esto. Esta tarea se puede hacer en unas pocas líneas de script de shell.
Aquí hay un script bash que las copias
~/Music
a/media/usb99
, omitiendo los archivos que son mayores en el objetivo, y los convertidos:
y?
para_
. No detecta enfrentamientos (supongo que no tiene ambosfoo:bar.mp3
yfoo?bar.mp3
).Este script funciona bajo zsh con modificaciones menores: reemplazar
shopt -s dotglob globstar
porsetopt dot_glob
y[[ $target -ot $source ]]
por[[ ! -e $target || $target -ot $source ]]
.fuente
Si es para propósitos de respaldo, solo guarde un tarball. No hay problemas de nombre de archivo de esa manera.
fuente