Quais são os charecters comuns que são ilegais nos sistemas de arquivos Unix AND Windows?

4

Oi eu estou procurando um caractere em sistemas de arquivos Unix e Windows que não é permitido em nomes de arquivos e diretórios e eu queria saber se existe tal personagem (eu notei que * e% são permitidos)?

    
por Zubair 02.03.2011 / 10:54

4 respostas

9

Não existe um sistema de arquivos "Unix". Nem um sistema de arquivos "Windows" chega a isso. Você quer dizer NTFS, FAT16, FAT32, ext2, ext3, ext4, etc. Cada um tem suas próprias limitações em caracteres válidos em nomes.

Além disso, o título e a pergunta de sua pergunta se referem a dois conceitos totalmente diferentes? Você quer saber sobre o subconjunto de caracteres legais ou quer saber quais caracteres curinga podem ser usados em ambos os sistemas?

link afirma que "todos os bytes exceto NULL e '/'" são permitidos em nomes de arquivos.

O link descreve o caso genérico de nomes de arquivos válidos ", independentemente do sistema de arquivo". Em particular, os seguintes caracteres são reservados < > : "/ \ |? *

O Windows também impõe restrições ao não uso de nomes de dispositivos para arquivos: CON, PRN, AUX, NUL, COM1, COM2, COM3, etc.

A maioria dos comandos nos sistemas operacionais Windows e Unix aceitam * como curinga. O Windows aceita% como um único caractere curinga, enquanto shells para sistemas Unix usam? como caractere curinga de caractere único.

    
por 02.03.2011 / 11:47
4

A maioria dos sistemas de arquivos é bastante permissiva: por exemplo, todos os NTFS, extN, btrfs, XFS e ReiserFS permitem tudo, exceto 1) o byte nulo e 2) a barra / .

O sistema operacional pode ter suas próprias restrições. Em particular, a API do Win32 0 não permite * ? como curingas, \ / como separadores de caminho, : como separador de fluxo e < > | " sem nenhuma boa razão 1 . Também não permitidos são caracteres de controle ASCII (o intervalo 0x00-0x1F).

No Unix, a expansão de curingas é feita pelo shell e pela função glob() . No Windows, é o trabalho do driver do sistema de arquivos, e é por isso que * e ? não podem ser usados em nomes de arquivos.

0 Não tenho informações sobre as APIs POSIX e OS / 2 oferecidas pelo Windows.

1 Eles são especiais no shell da linha de comando ( cmd.exe ), mas certamente poderiam (e de fato funcionam) para escapar como shells Unix.

    
por 02.03.2011 / 12:02
2

Depende realmente do sistema de arquivos, mas a maioria dos sistemas de arquivos Unix permite qualquer byte, exceto NULL e /. NTFS permite todos, exceto NULL e \ /: *? "< > |.

Existe um gráfico comparativo extremamente útil na Wikipédia: link

Dito isso, quase todos os shells reconhecem * como um curinga primeiro e um caractere em um nome de arquivo apenas quando escaparam. Por que não usaria o uso *?

    
por 02.03.2011 / 11:34
2

* deve funcionar como um caractere curinga em ambos, mas é o shell ou o comando invocado que expande essas coisas, em vez do próprio sistema de arquivos. Bash, por exemplo, expandirá * para uma lista separada por espaços de arquivos na pasta atual.

Eu não acho que o sistema de arquivos proíba expressamente qualquer caractere. É bem possível criar nomes de arquivos em ext2 ou NTFS com nomes como *&( . A GUI do Windows pode não permitir, mas você pode fazer isso no Cygwin, já que o sistema de arquivos subjacente permite isso.

    
por 02.03.2011 / 11:36

Tags