Solución 1:
Los únicos caracteres no permitidos en un nombre de archivo en *nix son NUL
y /
. En Windows, solo NUL
, :
y \
realmente no están permitidos, pero muchas aplicaciones lo restringen aún más, lo que también evita que ?
, *
, +
y %
.
En ningún momento los caracteres en un nombre de archivo necesitan escaparse excepto cuando sea necesario para que el shell no lo interprete.
Solución 2:
Hay una discusión sobre los caracteres de nombre de archivo en el artículo de Wikipedia sobre Nombres de archivo.
Puede encontrar este ensayo informativo:Corrección de nombres de archivo Unix/Linux/POSIX.
Este artículo compara OS X y Windows XP:X vs. XP:Caracteres prohibidos en los nombres de archivo (PDF, ver págs. 64-66 aprox.).
Cosas que no deberían estar en los nombres de archivos por $1,000 Alex
No sé qué caracteres deben ser un -escapado, pero en Linux, probablemente no sea una buena idea escapar los caracteres que pueden tener un significado especial como "n" (nueva línea), "t" (tabulador) y otros, pero eso generalmente no es un problema en las operaciones de archivos. Quizás te refieres a "escapado" en lugar de "sin escape". Los más comunes son los que el shell interpretará, como espacio, ">", "<", etc. Vea algunos de los artículos que vinculé para una discusión sobre ellos.
Solución 3:
Si crea un archivo en Windows con Explorer usando uno de los siguientes caracteres, se quejará de que los caracteres no están permitidos:
\ / : * ? " < > |
Una buena referencia está aquí:
Nombrar archivos, rutas y espacios de nombres
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
Microsoft afirma además:
"... en plataformas de escritorio basadas en Windows, los caracteres de ruta no válidos pueden incluir caracteres ASCII/Unicode del 1 al 31, así como comillas ("), menor que (<), mayor que (>), tubería (|), retroceso (\b), nulo (\0) y tabulador (\t)."
http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx
Solución 4:
En Linux y otros sistemas compatibles con POSIX, "/" está reservado como separador de directorios y "\0" (el carácter NULL) designa el final de la cadena. Todo lo demás está permitido.