Hallo, ich suche nach einem Zeichen in Unix- und Windows-Dateisystemen, das in Datei- und Verzeichnisnamen nicht zulässig ist, und habe mich gefragt, ob es ein solches Zeichen gibt (ich habe festgestellt, dass * und% zulässig sind).
Hallo, ich suche nach einem Zeichen in Unix- und Windows-Dateisystemen, das in Datei- und Verzeichnisnamen nicht zulässig ist, und habe mich gefragt, ob es ein solches Zeichen gibt (ich habe festgestellt, dass * und% zulässig sind).
Antworten:
Es gibt kein "Unix" -Dateisystem. Dazu kommt auch kein "Windows" -Dateisystem. Meinen Sie NTFS, FAT16, FAT32, ext2, ext3, ext4 usw. Jedes hat seine eigenen Einschränkungen für gültige Zeichen in Namen.
Auch beziehen sich Ihr Fragentitel und Ihre Frage auf zwei völlig unterschiedliche Konzepte? Möchten Sie die Teilmenge der zulässigen Zeichen kennen oder möchten Sie wissen, welche Platzhalterzeichen in beiden Systemen verwendet werden können?
http://en.wikipedia.org/wiki/Ext3 gibt an, dass "alle Bytes außer NULL und '/'" in Dateinamen zulässig sind.
http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx beschreibt den generischen Fall für gültige Dateinamen "unabhängig vom Dateisystem". Insbesondere sind folgende Zeichen <> reserviert: "/ \ |? *
Windows beschränkt außerdem die Nichtverwendung von Gerätenamen für Dateien: CON, PRN, AUX, NUL, COM1, COM2, COM3 usw.
Die meisten Befehle in Windows- und Unix-basierten Betriebssystemen akzeptieren * als Platzhalter. Windows akzeptiert% als Platzhalter für einzelne Zeichen, während Shells für Unix-Systeme? als Single Char Wildcard.
touch '*'
. Wenn dies eine gute Idee ist, ist ein separates Thema ...
Die meisten Dateisysteme sind recht freizügig: Beispielsweise erlauben alle NTFS, extN, btrfs, XFS und ReiserFS alles außer 1) dem Nullbyte und 2) dem Schrägstrich /
.
Das Betriebssystem hat möglicherweise seine eigenen Einschränkungen. Insbesondere die Win32 0 API Verhindert * ?
als Platzhalter, \ /
als Pfadtrenn, :
als Strom Separator und < > | "
ohne guten Grund 1 . Ebenfalls nicht zulässig sind ASCII-Steuerzeichen (Bereich 0x00-0x1F).
Unter Unix erfolgt die Platzhaltererweiterung durch die Shell und die glob()
Funktion. In Windows ist es die Aufgabe der Dateisystem - Treiber, weshalb ist *
und ?
in Dateinamen nicht verwendet werden kann.
0 Ich habe keine Informationen zu den von Windows angebotenen POSIX- und OS / 2-APIs.
1 Sie sind etwas Besonderes in der Befehlszeilen-Shell ( cmd.exe
), aber sie könnte (und tut es tatsächlich) auch mit dem Entkommen umgehen, wie es Unix-Shells tun.
Es hängt wirklich vom Dateisystem ab, aber die meisten Unix-Dateisysteme erlauben jedes Byte außer NULL und /. NTFS erlaubt alle außer NULL und \ /: *? "<> |.
Auf Wikipedia gibt es eine äußerst hilfreiche Vergleichstabelle: http://en.wikipedia.org/wiki/Comparison_of_file_systems
Das heißt, fast alle Shells erkennen * zuerst als Platzhalter und als Zeichen in einem Dateinamen, wenn sie entkommen. Warum sollte use * nicht verwendet werden?
*
sollte in beiden Fällen als Platzhalter funktionieren, aber es ist die Shell oder der aufgerufene Befehl, der diese Dinge erweitert, und nicht das Dateisystem selbst. Bash wird beispielsweise *
zu einer durch Leerzeichen getrennten Liste von Dateien im aktuellen Ordner erweitert.
Ich glaube nicht, dass eines der Dateisysteme ausdrücklich Zeichen verbietet. Es ist durchaus möglich, Dateinamen auf ext2 oder NTFS mit Namen wie zu erstellen *&(
. Die Windows-Benutzeroberfläche lässt Sie möglicherweise nicht zu, aber Sie können dies in Cygwin tun, da das zugrunde liegende Dateisystem dies zulässt.