varios una todos que por permisos para otro mover los listar letra empiecen ejemplos directorio crear copiar comandos comando basicos archivos archivo linux command-line filenames

linux - una - ¿Qué secuencia de caracteres no debería permitir en un nombre de archivo?



mover varios archivos en linux (6)

¿Está desarrollando una aplicación en la que tiene que pedirle al usuario que cree los archivos ellos mismos? Si eso es lo que está haciendo, entonces puede establecer las reglas en su aplicación. (Por ejemplo, solo permita [a-zA-Z0-9_.] y rechace el resto de caracteres especiales). Esto es mucho más sencillo de aplicar.

Descubrí después de probar que Linux permite cualquier carácter en un nombre de archivo, excepto para / y nulo ( /0 ). Entonces, ¿qué secuencia no debería permitir en un nombre de archivo? Escuché un encabezado - puede confundir algunos programas de línea de comandos, lo que no me importa, sin embargo, puede molestar a otras personas si deciden recopilar un montón de archivos y filtrarlos con algunos programas GNU.

Se me sugirió que elimine los espacios iniciales y finales, y planeo hacerlo solo porque, por lo general, el usuario no quiere tener un espacio inicial o final.

¿Qué secuencia problemática podría haber y qué secuencia debería considerar no permitir? También estoy considerando no permitir caracteres ilegales en Windows solo por conveniencia. Creo que es posible que no permita guiones al principio (el guión es un carácter de ventana legal)


Como parece que te interesa principalmente Linux, una cosa que debes evitar es los caracteres que el shell (típico) intentará interpretar, por ejemplo, como un comodín. Puede crear un archivo llamado "*" si insiste, pero podría tener algunos usuarios que no lo aprecian mucho.


Dejaría la determinación de qué es "válido" hasta el sistema operativo y el controlador del sistema de archivos. Deje que el usuario escriba lo que quiera y se lo pase. Manejar los errores del sistema operativo de manera adecuada. La excepción es que creo que es razonable quitar los espacios iniciales y finales. Si las personas desean crear nombres de archivos con espacios incrustados o guiones o signos de interrogación iniciales, y su sistema de archivos elegido lo permite, no debería ser su responsabilidad tratar de evitarlos.

Es posible montar diferentes sistemas de archivos en diferentes puntos de montaje (o unidades en Windows) que tienen diferentes reglas con respecto a los caracteres legales en un nombre de archivo. Manejar este tipo de cosas dentro de su aplicación será mucho más laborioso de lo necesario, porque el sistema operativo ya lo hará por usted.


Recomiendo el uso de un conjunto de caracteres de lista blanca. En general, los símbolos en los nombres de archivo molestarán a la gente.

De todos modos, permita que las personas usen az 0-9 y caracteres Unicode> 0x80, pero no permita símbolos arbitrarios, como & y y, causará mucha molestia, así como paradas completas en lugares inapropiados.

Creo que los símbolos ASCII que son seguros para permitir son: guión de subrayado de parada completa

Permitir cualquier otro símbolo ASCII en el nombre del archivo es pedir problemas.

Un nombre de archivo tampoco debe comenzar con un símbolo ASCII. La política sobre espacios en los nombres de archivos es complicada ya que los usuarios pueden esperar poder usarlos, pero algunos nombres de archivos son obviamente tontos (como los que COMENZAN con espacios)


Su pregunta es algo confusa ya que habla mucho sobre Linux, pero luego, en un comentario a otra respuesta, dice que está generando nombres de archivos para que la gente los descargue, lo que presumiblemente significa que no tiene absolutamente ningún control sobre el sistema de archivos y el sistema operativo que Los archivos se almacenarán en, lo que hace que Linux sea completamente irrelevante.

Para el propósito de esta respuesta, voy a asumir que su pregunta es incorrecta y su comentario es correcto.

La gran mayoría de los sistemas operativos y sistemas de archivos actualmente en uso se dividen aproximadamente en tres categorías: POSIX, Windows y MacOS.

La especificación POSIX es muy clara sobre cómo se ve un nombre de archivo que se garantiza que sea portátil en todos los sistemas POSIX. Los caracteres que puede usar se definen en la Sección 3.276 (Conjunto de caracteres de nombre de archivo portátil) de la Especificación básica de grupo abierto como:

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789._- La longitud máxima de nombre de archivo en la que puede confiar se define en la Sección 13.23.3.5 ( <limits.h> Valores mínimos) como 14 . (La constante relevante es _POSIX_NAME_MAX .)

Por lo tanto, un nombre de archivo que tiene hasta 14 caracteres y contiene solo los 65 caracteres enumerados anteriormente, es seguro de usar en todos los sistemas compatibles con POSIX, lo que le brinda 24407335764928225040435790 combinaciones (o aproximadamente 84 bits).

Si no desea molestar a sus usuarios, debe agregar dos restricciones más: no comience el nombre de archivo con un guión o un punto. Los nombres de archivos que comienzan con un punto se interpretan habitualmente como archivos "ocultos" y no se muestran en las listas de directorios a menos que se soliciten explícitamente. Y los nombres de archivos que comienzan con un guión pueden ser interpretados como una opción por muchos comandos. (Nota: es sorprendente la cantidad de usuarios que no conocen los rm ./-rf o rm -- -rf ).

Esto te deja en 23656340818315048885345458 combinaciones (aún 84 bits).

Windows agrega un par de restricciones nuevas a esto: los nombres de archivo no pueden terminar con un punto y los nombres de archivo no distinguen entre mayúsculas y minúsculas. Esto reduce el conjunto de caracteres de 65 a 39 caracteres (37 para el primero, 38 para el último carácter). No agrega restricciones de longitud, Windows puede manejar 14 caracteres muy bien.

Esto reduce las posibles combinaciones a 17866587696996781449603 (73 bits).

Otra restricción es que Windows trata todo después del último punto como una extensión de nombre de archivo que denota el tipo de archivo. Si desea evitar una posible confusión (por ejemplo, si genera un nombre de archivo como abc.mp3 para un archivo de texto), debe evitar los puntos por completo.

Aún tienes 13090925539866773438463 combinaciones (73 bits).

Si tiene que preocuparse por DOS, entonces se aplican restricciones adicionales: el nombre de archivo consta de una o dos partes (separadas por un punto), donde ninguna de las dos partes puede contener un punto. La primera parte tiene una longitud máxima de 8, la segunda de 3 caracteres. Una vez más, la segunda parte suele estar reservada para indicar el tipo de archivo, lo que le deja solo 8 caracteres.

Ahora tiene 4347792138495 posibles nombres de archivo o 41 bits.

La buena noticia es que puede utilizar la extensión de 3 caracteres para indicar realmente el tipo de archivo, sin romper el límite de nombre de archivo POSIX (8 + 3 + 1 = 12 <14).

Si desea que sus usuarios puedan grabar los archivos en un CD-R formateado con el nivel 1 de ISO9660, entonces debe rechazar el guión en cualquier lugar, no solo como el primer carácter. Ahora, el conjunto de caracteres restante se ve como

ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789_ lo que le da 3512479453921 combinaciones (41 bits).


urlencode todas las cadenas para usarlas como nombres de archivos y solo tendrá que preocuparse por la longitud. Esta respuesta podría valer la pena leerla.