No Linux e outros sistemas relacionados ao Unix, existem apenas dois caracteres que não podem aparecer no nome de um arquivo ou diretório, e esses são NUL '\0'
e barra '/'
. A barra, é claro, pode aparecer no nome de um caminho, separando os componentes do diretório.
Rumor 1 diz que Steven Bourne (de 'shell' fama) teve um diretório contendo 254 arquivos, um para cada letra (código de caracteres) que pode aparecer em um nome de arquivo (excluindo /
, '\0'
; o nome .
era o diretório atual, é claro ) Foi usado para testar o shell Bourne e causar estragos rotineiramente em programas incautos, como programas de backup.
Outras pessoas cobriram as regras do Windows.
Observe que o MacOS X possui um sistema de arquivos que não diferencia maiúsculas de minúsculas.
1 Foi Kernighan & Pike em
The Practice of Programming quem disse o mesmo no capítulo 6, testes, §6.5 testes de estresse:
Quando Steve Bourne estava escrevendo seu shell Unix (que ficou conhecido como shell Bourne), ele criou um diretório de 254 arquivos com nomes de um caractere, um para cada valor de byte, exceto '\0'
e barra, os dois caracteres que não podem aparecer no Unix nomes de arquivo. Ele usou esse diretório para todos os tipos de testes de correspondência de padrões e tokenização. (É claro que o diretório de teste foi criado por um programa.) Por anos depois, esse diretório foi banido de programas que andam em árvores de arquivos; testou-os à destruição.
Observe que o diretório deve ter entradas .
e ..
, portanto, eram 253 arquivos (e 2 diretórios) ou 255 entradas de nome, em vez de 254 arquivos. Isso não afeta a eficácia da anedota ou o teste cuidadoso que ela descreve.
echo abc > "ab.;,=[1]"