Actualmente, uso un YYMMDD-NAME+PAGE
nombre para la mayoría de mis archivos. NAME
tiene espacios convertidos en guiones bajos.
Me gustaría usar el YYYY-MM-DD
formato de fecha, pero no estoy seguro de cómo separarlo del nombre. A -
parecería extraño si el nombre comenzara con un número. Si uso a _
, entonces entra en conflicto con el guión bajo que representa un espacio.
¿Qué caracteres son razonablemente seguros en los nombres de archivo que funcionarían aquí? Estoy en Linux, pero podría compartir archivos con otras personas (Windows 7, Mac OS X).
Respuestas:
Resumen:
\/:*?"<>|
/
En todas las plataformas, es mejor evitar los caracteres no imprimibles, como los caracteres de control ASCII.
Ventanas
En Windows, el Explorador de Windows no permite caracteres de control o
\/:*?"<>|
puede usar espacios. Si usa espacios, a menudo tendrá que citar el nombre del archivo cuando lo use desde la línea de comandos (pero las aplicaciones GUI no se ven afectadas hasta donde yo sé). El sistema de archivos de Windows como NTFS aparentemente almacena la codificación con el nombre del archivo, pero UTF-16 es estándar.Algunas partes de Windows distinguen entre mayúsculas y minúsculas, otras partes no distinguen entre mayúsculas y minúsculas. Es fácil crear nombres de archivo distintos como "Ab" y "ab" en un sistema de archivos NTFS de Windows. Estos nombres se refieren a archivos separados que contienen contenido separado distinto. Sin embargo, aunque el símbolo del sistema de Windows listará felizmente ambos archivos usando
dir
, no puede acceder fácilmente o manipular uno de ellos usando comandos comotype
. Vea abajo.Linux, OS-X
/
Creo que en Linux y OS-X solo está prohibido el conjunto ASCII imprimible. Algunos caracteres (como los metacaracteres de shell*?!
) causarán problemas en las líneas de comando y requerirán que el nombre de archivo se cite o se escape correctamente.Los sistemas de archivos de Linux como ext2, ext3 son independientes del conjunto de caracteres (creo que simplemente lo tratan más o menos como una secuencia de bytes, solo nulos y
/
están prohibidos). Esto significa que puede almacenar nombres de archivo en codificación UTF-8. Creo que depende del shell u otra aplicación saber qué codificación usar para convertir correctamente el nombre de archivo para su visualización o procesamiento.Conclusión
Entonces, probablemente podría usar algo como
✣
(si no fuera tan difícil de escribir)Case- (in) sensibilidad en Windows
Tenga en cuenta que no podemos escribir el contenido del segundo archivo, el
type
comando de Windows solo devuelve el contenido de Ab. El tercer archivo también sería distinto de aB en Linux.(Windows 10 NTFS).
fuente
Si bien la respuesta de RedGrittyBrick es técnicamente correcta, la seguridad no es el único problema: la usabilidad también es importante. Creo que una mejor pregunta es "qué caracteres son buenos para usar en un nombre de archivo".
Algunas pautas potenciales:
\/:*?"<>|
y el byte nulo son problemáticos en al menos un sistema, y siempre deben evitarse.[]()^ #%&!@:+={}'~
y [`] todos tienen significados especiales en muchos proyectiles, y son molestos para evitarlos, por lo que deben evitarse. También tienden a verse horribles en las URL .Eso básicamente te deja con:
[0-9a-zA-Z -._]
que siempre son seguros y no molestos de usar (siempre que comience el nombre de archivo con un alfanumérico) :)
fuente
[]
) son parte de expresiones regulares y también tienen un significado especial en el shell. Pero no son tan malos para trabajar, excepto algunos casos de esquina malvados.()
, en realidad.[]()^;
, por lo que creo que la respuesta correcta podría ser[0-9a-zA-Z.,_-]
Coma, también podría excluirse solo porque es extraño ver en un nombre de archivo, aunque no puedo pensar en un caso real en el que podría causar problemas.echo whereami > a,b,c
en la ventana del símbolo del sistema de Win10.Tú podrías:
#
(símbolo del corrector de pruebas para el espacio)Alt-1. las mayúsculas iniciales pueden reemplazar espacios:
YYMMDD-HHMM-FileName.ext
oYYMMDD-HHMM_FileName.ext
Caracteres mínimos para una visualización clara, que se ordena automáticamente con ceros rellenos para enero-septiembre (y del 1 al 9 de cada mes).
fuente