En corto
| |
Si los nombres vienen de un Windows o un Samba viejos y ni siquiera son UTF-8 (convmv los marca como not UTF-8): convmv -f iso-8859-1 -t utf-8 -r --notest <ruta>.
En Docker, el occ va dentro del contenedor: docker exec -u www-data nextcloud php occ files:scan --all (en la imagen de linuxserver.io, sudo -u abc php /config/www/nextcloud/console.php files:scan --all).
El error
| |
Lo imprime occ files:scan. Los archivos están en disco, se ven con ls, pero no salen en la web, ni sincronizan, ni cuentan para el espacio. Aparece casi siempre después de copiar datos directamente al data directory (migraciones, rsync desde un Mac, un recurso SMB montado como external storage) en vez de subirlos por el cliente.
Por qué pasa
Unicode permite escribir “ñ” de dos formas: precompuesta (NFC, un solo code point) o descompuesta (NFD, una “n” más una tilde combinante). Se ven idénticas y son bytes distintos. macOS históricamente guarda los nombres en NFD (HFS+ los forzaba; APFS y el Finder siguen produciéndolos al copiar por SMB o rsync); Linux y Nextcloud trabajan en NFC. Nextcloud normaliza todos los nombres a NFC y descarta los que no puede casar con lo que hay en disco, de ahí el aviso.
El otro caso es más viejo: nombres en ISO-8859-1 (Latin-1) heredados de Windows o de un Samba sin unix charset = UTF-8. No son UTF-8 válido y Nextcloud tampoco los acepta.
Arreglo, con calma
- Modo mantenimiento para que ningún cliente sincronice a medias:
occ maintenance:mode --on. - Simula:
convmvsin--notestlista cada renombrado que haría. Si aparecen archivos not UTF-8, esos van con-f iso-8859-1. - Aplica con
--notest. Si ya existe el gemelo en NFC (el mismo nombre subido dos veces),convmvlo salta y avisa;--replacesobrescribe, así que decide antes cuál es el bueno. occ files:scan --all(o--path=/alice/files/Fotospara un usuario o carpeta). El aviso desaparece y los archivos entran al índice.occ maintenance:mode --off.
convmv renombra con rename(): conserva dueño, permisos y fechas, y es instantáneo aunque sean cientos de miles de archivos.
Que no vuelva
- Desde macOS, sube con el cliente de Nextcloud, que normaliza a NFC. Si copias con
rsync,--iconv=utf-8-mac,utf-8convierte los nombres en vuelo. - Samba como puente:
vfs objects = fruitconfruit:encoding = nativehace la conversión para clientes Mac; yunix charset = UTF-8siempre. - External storage SMB/local: arregla los nombres en el origen; Nextcloud no renombra lo que no puede indexar.
Trampas
--notestes lo que aplica. Al revés de lo que uno espera: por defectoconvmves un simulacro.- Renombrar cambia el
fileid. Para Nextcloud, el archivo NFD desaparece y nace uno NFC: los enlaces compartidos, comentarios y versiones de esos archivos se pierden. Avisa a los usuarios afectados antes. - ownCloud tiene el mismo comportamiento y el mismo
occ. - Bases MySQL con
utf8de 3 bytes dan un error parecido pero distinto (emojis y CJK): ahí esocc db:convert-mysql-charset, noconvmv.
Ver también: Seafile: recuperar espacio con seaf-gc y rsync: reanudar copias grandes (el --iconv). Referencia: hilo en help.nextcloud.com.