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 typecomando do Windows apenas retorna o conteúdo de Ab. O terceiro arquivo também seria distinto do aB no Linux.
(Windows 10 NTFS).