Resumo:
- Windows: qualquer coisa, exceto os caracteres de controle do ASCII e
\/:*?"<>|
- Linux, OS-X: qualquer coisa, exceto nulo ou
/
Em todas as plataformas, é melhor evitar caracteres não imprimíveis, como os caracteres de controle ASCII.
janelas
No Windows, o Windows Explorer não permite caracteres de controle ou \/:*?"<>|
você pode usar espaços. Se você usa espaços, geralmente precisará citar o nome do arquivo quando usado na linha de comando (mas os aplicativos GUI não são afetados até onde eu sei). O sistema de arquivos do Windows, como o NTFS, aparentemente armazena a codificação com o nome do arquivo, mas o UTF-16 é padrão.
Algumas partes do Windows diferenciam maiúsculas de minúsculas, outras não diferenciam maiúsculas de minúsculas. É fácil criar nomes de arquivos distintos como "Ab" e "ab" em um sistema de arquivos Windows NTFS. Esses nomes se referem a arquivos separados que contêm conteúdo separado distinto. No entanto, embora o prompt de comando do Windows liste com satisfação os dois arquivos dir
, não é possível acessar ou manipular facilmente um deles usando comandos como type
. Ver abaixo.
Linux, OS-X
No Linux e OS-X, apenas /
o conjunto ASCII imprimível é proibido, acredito. Alguns caracteres (como metacaracteres do shell *?!
) causarão problemas nas linhas de comando e exigirão que o nome do arquivo seja citado ou escapado adequadamente.
Os sistemas de arquivos Linux, como ext2, ext3, são agnósticos no conjunto de caracteres (acho que eles o tratam mais ou menos como um fluxo de bytes - apenas nulos e /
são proibidos). Isso significa que você pode armazenar nomes de arquivos na codificação UTF-8. Acredito que cabe ao shell ou outro aplicativo saber qual codificação usar para converter corretamente o nome do arquivo para exibição ou processamento.
Conclusão
Então você provavelmente poderia usar com segurança algo como ✣
(se não fosse tão difícil digitar)
Sensibilidade a maiúsculas e minúsculas no Windows
C> dir /B
Ab
aB
аB
C> type Ab
b
b
C> type aB
b
b
C> type аB
unicode homograph
Observe que não podemos digitar o conteúdo do segundo arquivo; o type
comando do Windows apenas retorna o conteúdo de Ab. O terceiro arquivo também seria distinto do aB no Linux.
(Windows 10 NTFS).