2009-08-21 26 views
41

Si quería crear una cadena que se garantiza que no representan un nombre de archivo, que podría poner uno de los siguientes personajes en él en Windows:¿Hay algún nombre de archivo de Linux no válido?

\/: * ? | < > 

por ejemplo,

this-is-a-filename.png 

?this-is-not.png 

¿Hay alguna manera de identificar una cadena como 'posiblemente no un archivo' en Linux?

+0

Bastante seguro que ''/'' al menos no está permitido (o sería un PITA completo si no fuera así) –

+1

char * str = "foo/bar"; bien podría representar un archivo aunque – nos

Respuesta

35

Casi no hay restricciones, aparte de '/' y '\0', puede usar cualquier cosa. Sin embargo, some people cree que no es una buena idea permitir tanta flexibilidad.

+5

+ puede depender del sistema de archivos que se esté utilizando. –

+0

La flexibilidad te causa problemas porque muchas aplicaciones tratan los nombres de archivos como una cadena de texto, y obtienes todo tipo de problemas de codificación de caracteres. Y ese es solo el problema obvio :) – nos

+2

De hecho, creo que al menos algunos sistemas de archivos pueden ser compatibles con 'NUL'. –

7

Una cadena vacía es el único nombre de ruta verdaderamente no válido en Linux, que puede funcionar para usted si solo necesita un nombre no válido. También podría usar una cadena como "///foo", que no sería canónica nombre de ruta, aunque podría referirse a un archivo ("/foo"). Otra posibilidad sería algo así como "/dev/null/foo", ya que /dev/null tiene un significado no de directorio definido por POSIX. Si solo necesita cadenas que no puedan referirse a un archivo normal, puede usar "/" o ".", ya que esos son siempre directorios.

-2

Personalmente encuentro que muchas veces el problema no es Linux, sino las aplicaciones que se usan en Linux.

Tomemos como ejemplo Amarok. Recientemente noté que ciertos artistas que había copiado de mi máquina Windows no aparecían en la biblioteca. Revisé y confirmé que los archivos estaban allí y luego noté que ciertos caracteres en los nombres de las carpetas (nombrados para el artista) estaban representados con un cuadrado de aspecto extraño en lugar de un personaje real.

En una terminal de shell, los nombres de archivo se ven aún más extraños:/Music/Albums/Einst $ '\ 374'rzende \ Neubauten es un ejemplo de lo extraño.

Mientras que estos archivos estaban definitivamente allí, Amarok no podía verlos por alguna razón. Pude usar algunos trucos de shell para cambiarles el nombre a versiones sanas, que luego pude renombrar con caracteres ASCII solo utilizando Musicbrainz Picard. Desafortunadamente, Picard tampoco pudo abrir los archivos hasta que los renombré, de ahí la necesidad de un script de shell.

En general, esta es un área difícil y parece ser muy espinosa si está tratando de sincronizar una colección de música entre Windows y Linux, donde ciertos nombres de carpeta o archivo contienen caracteres funky.

Lo más seguro es apegarse a los nombres de archivo solo ASCII.

+1

Esto no aborda la pregunta que me temo. – Mat

+0

No estoy de acuerdo.Técnicamente, el sistema de archivos NTFS admite todo tipo de funciones geniales que la "aplicación" primaria que lo utiliza (Windows) no considera válido o no utiliza. – OOPMan

+0

Parece que su cuadro de Windows utilizó una codificación diferente a la configuración regional de Linux. siempre que sus nombres de archivo estén codificados con la misma codificación que su localidad, debería estar bien usando caracteres amplios, aunque tiene razón en que es más seguro usar ascii. –

Cuestiones relacionadas