Diese Frage stellte sich mir neulich, als ich an einem Entwicklungsprojekt arbeitete, das auf einem mit einer Meinung versehenen Rahmen hinsichtlich der Dateinamen beruht. Das Framework (hier irrelevant) wollte die Dateinamen in Großbuchstaben sehen. Das brachte mich zum Nachdenken.
Sagen Sie auf einem Dateisystem, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, extFAT oder HFS + (insbesondere nicht die Groß- und Kleinschreibung) .
Beispielsweise:
$ cd ~/Documents
$ pwd
/home/derp/Documents
$ cd ../documents
$ pwd
/home/derp/documents
$ cd ../docuMents
$ pwd
/home/derp/docuMents
$ cd ../DOCUMENTS
$ pwd
/home/derp/DOCUMENTS
$ cd ../documentS
$ pwd
/home/derp/documentS
Alle diese Befehle werden in dasselbe Verzeichnis aufgelöst. Ist dieses Verhalten, speziell die Ausgabe von pwd
nur einer Funktion, bash
in diesem Fall nur zu zeigen, was es denkt, dass ich sehen möchte?
Ein anderes Beispiel:
$ ls ~/Documents
Derp.txt another.txt whatThe.WORLD
Das Dateisystem meldet hier den Fall des ursprünglichen Dateinamens, wie er vom Benutzer oder Programm erstellt wurde.
An welcher Stelle im Dateisystemstapel bleibt der lesbare Dateiname beim Erstellen erhalten (z. B. Groß- und Kleinbuchstaben), sodass auf ihn durch eine beliebige Kombination der korrekten ASCII-Groß- und Kleinbuchstaben zugegriffen werden kann? Ist das irgendwo nur ein Regex-Trick oder ist da noch etwas los?
EDIT: Es sieht aus wie das Verhalten , das ich neugierig bin in gefunden Fall erhalt Groß- und Kleinschreibung von Dateisystemen nach einiger mehr Forschung ...
quelle
Antworten:
Ein Dateisystem, bei dem die Groß- und Kleinschreibung nicht beachtet wird, bedeutet lediglich, dass sich A auf dieselbe Datei / dasselbe Verzeichnis wie B bezieht, wenn das Dateisystem gefragt werden muss. Es vergleicht die Namen von Dateien / Verzeichnissen, wobei Unterschiede in Groß- / Kleinschreibung ignoriert werden (genau die Anzahl der Unterschiede in Groß- / Kleinschreibung hängt vom Dateisystem ab - es ist nicht offensichtlich, wenn Sie über ASCII hinausgehen). Ein Dateisystem, bei dem die Groß- und Kleinschreibung beachtet wird, ignoriert diese Unterschiede nicht.
Ein Dateisystem, das die Groß- und Kleinschreibung beibehält, speichert Dateinamen wie angegeben. Ein Dateisystem, bei dem die Groß- / Kleinschreibung nicht beibehalten wird, führt dies nicht aus. In der Regel werden alle Buchstaben vor dem Speichern in Großbuchstaben konvertiert (theoretisch können Kleinbuchstaben, RaNsOm NoTe-Großbuchstaben oder was auch immer verwendet werden, aber AFAIK verwendet für alle realen Buchstaben Großbuchstaben).
Sie können diese beiden Attribute in einer beliebigen Kombination zusammenfassen. Ich bin nicht sicher, ob Sie nicht case-preserving case-sensitive Dateisysteme finden können, aber Sie könnten sicherlich eines erstellen. Alle anderen Kombinationen existieren oder existierten in realen Systemen.
Daher speichert und gibt ein case-preserving, case-insensitives Dateisystem (das heutzutage am häufigsten verwendete case-insensitive Dateisystem) Dateinamen in der Groß- und Kleinschreibung zurück, in der Sie sie erstellt oder zuletzt umbenannt haben, wenn Sie jedoch zwei Dateinamen vergleichen (um zu prüfen, ob einer vorhanden ist) existiert, um eine zu öffnen, eine zu löschen, etc.) werden die Unterschiede zwischen Groß- und Kleinschreibung ignoriert.
Wenn Sie ein Groß- und Kleinschreibung Dateisystem auf einem Feld Unix verwenden, werden verschiedene Dienstprogramme seltsame Dinge tun , weil Unix - case-sensitiven Dateisystem-so traditionell verwendet werden sie nicht erwartet
Document1
unddocument1
die gleiche Datei zu sein.In diesem
pwd
Fall wird standardmäßig nur der Pfad ausgegeben, den Sie tatsächlich zum Verzeichnis verwendet haben. Wenn Sie über dort ankommencd DirName
, wird esDirName
in der Ausgabe verwendet. Wenn Sie über dort angekommen sindDiRnAmE
, werden SieDiRnAmE
in der Ausgabe sehen. Bash führt dies durch, indem es festhält, wie Sie in der$PWD
Umgebungsvariablen zu Ihrem aktuellen Verzeichnis gelangt sind. Dies gilt hauptsächlich für Symlinks (wenn Siecd
in einen Symlink eingebunden sind, wird der Symlink in Ihrem angezeigtpwd
, obwohl er eigentlich nicht Teil des Pfads zu Ihrem aktuellen Verzeichnis ist). Es gibt aber auch das etwas seltsame Verhalten, das Sie auf Dateisystemen beobachten, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird. Ich vermute,pwd -P
dass Sie den Verzeichnisnamen anhand der auf der Festplatte gespeicherten Groß- / Kleinschreibung erhalten, die Sie jedoch nicht getestet haben.quelle