Caracteres permitidos en el nombre

¿Dónde puedo encontrar una lista de caracteres permitidos en nombres de archivos, dependiendo del sistema operativo? (por ejemplo, en Linux, el carácter : está permitido en los nombres de archivo, pero no en Windows)

Puede comenzar con la página Wikipedia Filename . Tiene una tabla de tamaño bastante decente ( Comparación de las limitaciones del nombre de archivo ) que enumera los caracteres reservados para bastantes sistemas de archivos.

Además de nombres de archivos reservados como CON bajo MS-DOS. Recuerdo haber sido mordido por eso una vez cuando acorté el archivo de const.h de const.h a con.h y pasé media hora averiguando por qué colgaba el comstackdor. con.h extensiones ignoradas de DOS para los dispositivos, de modo que con.h era exactamente lo mismo que con , la consola de entrada (es decir, por supuesto, el comstackdor esperaba que con.h el archivo de encabezado antes de que continuara).

En el sistema operativo Windows, crea un archivo y dale un carácter no válido como \ en el nombre del archivo. Como resultado, aparecerá una ventana emergente con todos los caracteres no válidos en un nombre de archivo.

enter image description here

De acuerdo, busque Comparación de sistemas de archivos si solo le importan los sistemas de archivos de los principales reproductores:

  • Windows (FAT32, NTFS): Cualquier Unicode excepto NUL , \ , / , : , * , " , < , > , |
  • Mac (HFS, HFS +): cualquier Unicode válido excepto : o /
  • Linux (ext [2-4]): cualquier byte excepto NUL o /

entonces cualquier byte excepto NUL , \ , / , : , * , " , < , > , | y no puede tener archivos / carpetas call . o .. y no hay caracteres de control (por supuesto).

Para ser más precisos acerca de Mac OS X (ahora llamado MacOS) / en el Finder se interpreta a : en el sistema de archivos Unix.

Esto se hizo por compatibilidad con versiones anteriores cuando Apple se mudó de Classic Mac OS.

Es legítimo utilizar un / en un nombre de archivo en el Finder, mirando el mismo archivo en el terminal que se mostrará con un :

Y también funciona al revés: no puede usar un / en un nombre de archivo con el terminal, pero a : está bien y se mostrará como / en el Buscador.

Algunas aplicaciones pueden ser más restrictivas y prohibir que ambos personajes eviten confusiones o porque mantienen la lógica del sistema operativo Mac OS clásico anterior o por la compatibilidad de nombres entre plataformas.

Aquí está el código para limpiar el nombre del archivo en python.

 import unicodedata def clean_name(name, replace_space_with=None): """ Remove invalid file name chars from the specified name :param name: the file name :param replace_space_with: if not none replace space with this string :return: a valid name for Win/Mac/Linux """ # ref: https://en.wikipedia.org/wiki/Filename # ref: https://stackoverflow.com/questions/4814040/allowed-characters-in-filename # No control chars, no: /, \, ?, %, *, :, |, ", <, > # remove control chars name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C') cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name) if replace_space_with is not None: return cleaned_name.replace(' ', replace_space_with) return cleaned_name