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.
Windows
No Windows, o Windows Explorer não permite caracteres de controle ou \/:*?"<>|
. Você pode usar espaços. Se você usa espaços, frequentemente terá que citar o nome do arquivo quando usado a partir da linha de comando (mas os aplicativos de 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 fazem distinção entre maiúsculas e minúsculas.
É fácil criar nomes de arquivos distintos como "Ab" e "ab" em um sistema de arquivos Windows NTFS. Esses nomes referem-se a arquivos separados que contêm conteúdo separado distinto. No entanto, embora o prompt de comando do Windows tenha a satisfação de listar os dois arquivos usando dir
, você não poderá acessar ou manipular facilmente um deles usando comandos como type
. Veja abaixo.
Linux, OS-X
No Linux e no OS-X, apenas /
do conjunto ASCII imprimível é proibido, acredito. Alguns caracteres (metacaracteres de shell como *?!
) causarão problemas nas linhas de comando e exigirão que o nome do arquivo seja adequadamente citado ou com escape.
Sistemas de arquivos Linux, como ext2, ext3, são agnósticos para conjuntos de caracteres (acho que eles apenas o tratam mais ou menos como um fluxo de bytes - somente 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 a 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 de digitar)
Sensibilidade ao caso (in) 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 comando type
do Windows apenas retorna o conteúdo de Ab. O terceiro arquivo também seria diferente de aB no Linux.
(Windows 10 NTFS).