Hier etwas schwieriges.
In Dateinamen sind ja alle Zeichen legal, außer Slashes, die als Trenner zwischen Verzeichnisnamen und Dateinamen fungieren und binären Nullen, welche das Ende des Dateinamens markieren aber selbst nicht zum Dateinamen gehören.
Jetzt wollte ich mal sehen, welche Fehlermeldung ich bekomme, wenn ich einen Konflikt provoziere.
In einem Verzeichnis, in dem kein Unterverzeichnis a existiert, bewirkt der Befehl:
1 2 | touch a/b touch: 'a/b' kann nicht berührt werden: Datei oder Verzeichnis nicht gefunden |
d.h. touch sucht ein Verzeichnis a, in dem es eine Datei b berühren könnte und findet keins. Soweit, so gut.
Jetzt will ich den verbotenen Namen a\0b probieren und gebe
1 | touch a\0b |
ein, und ohne zu murren wird eine Datei a0b erzeugt, ganz als hätte ich keinen Backslash verwendet.
Kann jemand erklären, wieso das so ist? In welchen Situationen ein Name wie a\0b zurückgewiesen wird?
Ich kann
1 2 3 | touch 'a\0b' # eingeben und erhalte dann: -rw-rw-r-- 1 stefan stefan 0 Aug 26 22:09 'a\0b' |
Aber dieser Dateiname besteht dann aus 4 Zeichen, a, Backslash, 0, b.
Dass
1 2 3 | touch a\0b # und touch a0b |
das gleiche Ergebnis liefern will sich mir nicht erschließen.