Sotto Linux e altri sistemi relativi a Unix, ci sono solo due caratteri che non possono apparire nel nome di un file o di una directory, e sono NUL '\0'
e barra '/'
. La barra, ovviamente, può apparire in un nome di percorso, separando i componenti della directory.
Rumor 1 vuole che Steven Bourne (di 'shell' fama) ha avuto una directory che contiene 254 file, uno per ogni singola lettera (codice carattere) che può apparire in un nome di file (ad esclusione /
, '\0'
, il nome .
è stata la directory corrente, naturalmente ). È stato usato per testare la shell Bourne e ha provocato il caos su programmi inconsueti come programmi di backup.
Altre persone hanno coperto le regole di Windows.
Nota che MacOS X ha un file system senza distinzione tra maiuscole e minuscole.
1 Fu Kernighan & Pike in
The Practice of Programming a dirlo nel Capitolo 6, Test, §6.5 Test di stress:
Quando Steve Bourne stava scrivendo la sua shell Unix (che divenne nota come shell Bourne), creò una directory di 254 file con nomi di un carattere, uno per ogni valore di byte tranne '\0'
e barra, i due caratteri che non possono apparire in Unix nomi dei file. Ha usato quella directory per tutti i tipi di test di pattern-matching e tokenizzazione. (La directory di test è stata ovviamente creata da un programma.) Per anni in seguito, quella directory è stata la rovina dei programmi di file tree-walking; li ha messi alla prova per la distruzione.
Si noti che la directory deve contenere voci .
e ..
, quindi, probabilmente 253 file (e 2 directory) o 255 voci nome, anziché 254 file. Ciò non influisce sull'efficacia dell'aneddoto o sull'attenta verifica che descrive.
echo abc > "ab.;,=[1]"