Bajo Linux y otros sistemas relacionados con Unix, solo hay dos caracteres que no pueden aparecer en el nombre de un archivo o directorio, y esos son NUL '\0'
y barra oblicua '/'
. La barra oblicua, por supuesto, puede aparecer en un nombre de ruta, separando los componentes del directorio.
El rumor 1 dice que Steven Bourne (de fama 'shell') tenía un directorio que contenía 254 archivos, uno por cada letra (código de carácter) que puede aparecer en un nombre de archivo (excluyendo /
, '\0'
el nombre .
era el directorio actual, por supuesto ) Se usó para probar el shell Bourne y ocasionar estragos en programas incautos como los programas de respaldo.
Otras personas han cubierto las reglas de Windows.
Tenga en cuenta que MacOS X tiene un sistema de archivos que no distingue entre mayúsculas y minúsculas.
1 Fue Kernighan & Pike en
The Practice of Programming quien dijo lo mismo en el Capítulo 6, Pruebas, §6.5 Pruebas de resistencia:
Cuando Steve Bourne estaba escribiendo su shell de Unix (que se conoció como el shell de Bourne), creó un directorio de 254 archivos con nombres de un carácter, uno para cada valor de byte excepto '\0'
y barra, los dos caracteres que no pueden aparecer en Unix nombres de archivo Utilizó ese directorio para todo tipo de pruebas de coincidencia de patrones y tokenización. (El directorio de prueba, por supuesto, fue creado por un programa). Durante años después, ese directorio fue la ruina de los programas de caminar por el árbol de archivos; los probó a la destrucción.
Tenga en cuenta que el directorio debe haber contenido entradas .
y ..
, por lo tanto, podría decirse que eran 253 archivos (y 2 directorios) o 255 entradas de nombre, en lugar de 254 archivos. Esto no afecta la efectividad de la anécdota o las pruebas cuidadosas que describe.
echo abc > "ab.;,=[1]"