Quais caracteres são válidos para usar em nomes de arquivos? [duplicado]

5

Parece que é possível criar nomes de arquivos no unix com praticamente qualquer caractere válido.

touch \; &&
touch \ &&
touch \" &&
touch $'\n' &&
touch $'\t' &&
touch $'\v' &&
touch $'' &&
touch $'' &&
echo "DONE!"

Os únicos caracteres que encontrei que não funcionam são / e NUL :

touch /
touch $'
touch \; &&
touch \ &&
touch \" &&
touch $'\n' &&
touch $'\t' &&
touch $'\v' &&
touch $'' &&
touch $'' &&
echo "DONE!"
'

Existem outros caracteres inválidos ou impossíveis de usar em nomes de arquivos?

    
por wefwefa3 17.09.2015 / 14:58

1 resposta

8

A resposta é: em sistemas do tipo Unix, os nomes de arquivos são compostos de bytes , não de caracteres. Pelo menos da perspectiva do kernel e sua API.

Um kernel parecido com o Unix é normalmente neutro em relação a qualquer valor de byte, mas \ 000 (ASCII: NUL) e \ 057 (ASCII: barra). No Linux não existem outras restrições na camada do sistema de arquivos, mas alguns drivers FS e certos modos levam à rejeição de alguns nomes, geralmente devido à impossibilidade de tradução. Por exemplo, não é possível criar um nome de arquivo com UTF-8 inválido em algo montado com -o iocharset=utf8 (por exemplo, tipos cifs ou vfat ). Nenhum dos FSs compatíveis com DOS / Windows permitirão que você faça \ 134 (ASCII: barra invertida) uma parte do nome. Ou o tipo msdos aplicará as restrições do DOS referentes a nomes 8.3.

Ext3 / ext4 não é conhecido por ter restrições, mas acima de \ 000 e \ 057.

    
por 17.09.2015 / 15:49