Wird es als Best Practice angesehen, bei der Benennung von Dateien keine Großbuchstaben zu verwenden?

28

Die Leute sagen, Sie sollten keine Leerzeichen bei der Benennung von Unix-Dateien verwenden. Gibt es gute Gründe, in Dateinamen keine Großbuchstaben zu verwenden (z. B. File_Name.txtvs. file_name.txt)? Oder ist das nur eine Frage der persönlichen Präferenz?

DD343
quelle
Sie können Kappen verwenden, aber standardmäßig nicht. Verwenden Sie nur kleine Buchstaben und _, damit dateiname.txt gut ist.
Shabir A.
9
Es gibt einige Unixy-Dinge, die Dateinamen mit Großbuchstaben verwenden ... einige Beispiele sind das Makefile, INSTALL, CHANGELOG und natürlich das ehrwürdige README.
Thomas
PSR-2 - der De-facto-Namensstandard der PHP-Welt, der mehrheitlich unter Linux ausgeführt wird, verwendet camelCase php-fig.org/psr/psr-2
jdog

Antworten:

46

Die Leute sagen, Sie sollten keine Leerzeichen in Unix-Dateinamen verwenden.

Die Leute sagen eine Menge Dinge. Es gibt einige Tools, die möglicherweise versagen, aber hoffentlich sind sie zu diesem Zeitpunkt nur wenige, da Leerzeichen ein Virus sind, der von riesigen, firmeneigenen OS-Unternehmen verbreitet wird und jetzt nicht mehr zu vermeiden ist.

Leerzeichen machen die Angabe von Dateinamen in der Befehlszeile usw. umständlich. Das ist alles. Die einzigen kategorisch verbotenen Zeichen auf * nix-Systemen sind NUL (keine Sorge, sie befinden sich nicht auf Ihrer Tastatur oder auf der anderer) und /da dies das Pfadtrennzeichen ist. 1 Sonst geht nichts. Einzelne Pfadelemente (Dateinamen) sind auf 255 Byte begrenzt (eine mögliche Komplikation, wenn Sie erweiterte Zeichensätze verwenden) und vervollständigen Pfade auf 4 KB.

Oder ist das nur eine Frage der persönlichen Präferenz?

Ich würde sagen, dass es so ist. Die meisten von DE scheinen eine ganze Reihe von aktivierten Verzeichnisse in Ihrem erstellen $HOME( Downloads, Desktop, Documents- das Dist sehr beliebt), so gibt es nichts bizarr darüber. Es gibt auch sehr alltägliche traditionelle Dateien mit Großbuchstaben wie .Xclientsund .Xauthority.

Ein Vorteil der Aktivierung von Dingen am Anfang ist, dass sie, wenn sie lexikografisch aufgelistet sind, vor Kleinbuchstaben stehen - zumindest mit vielen Werkzeugen und abhängig vom Gebietsschema.

Ich bin ein Fan von Camel Case (auch bekannt als CamelCase) und benutze es zum Beispiel mit Dateinamen /home/goldilocks/blueSuedeShoes- egal was drin ist . Auf jeden Fall eine Frage der persönlichen Präferenz, aber es hat mir noch keinen Kummer bereitet.

Java-Klassendateien enthalten in der Regel von Natur aus Großbuchstaben, da dies bei Java-Klassennamen der Fall ist. Und natürlich nicht vergessen NetworkManager, auch wenn einige von uns es vorziehen würden.


1. Es gibt einen viel weiter abgegrenzten, von POSIX empfohlenen "Portable Filename Character Set" , der kein Leerzeichen enthält - aber Großbuchstaben enthält! POSIX gibt auch die allgemeinere Einschränkung bezüglich "des Schrägstrichs und des Null-Bytes" an einer anderen Stelle im selben Dokument an . Dies spiegelt die langjährigen konventionellen Praktiken wider oder spiegelt sich in ihnen wider .

Goldlöckchen
quelle
5
Mia: Ist das eine Tatsache? Vincent: Nein, das ist es nicht. Es ist nur das, was ich gehört habe. Mia: Wer hat dir das gesagt? Vincent: "Sie." Mia: Sie reden viel, nicht wahr? Vincent: "Das tun sie bestimmt."
Corsika
4
„Der Wert etwas am Anfang der Kapitalisierung ist , dass , wenn lexikografisch aufgeführt [...], sie vor allem kommen würde sonst.“ - Natürlich funktioniert dies nur , wenn die meisten der Dateinamen klein geschrieben sind, können Ihnen einen Grund zu geben Reservekappen ( mindestens führende Kappen) für Ihr READMEs und Makefiles und so weiter.
Blacklight Shining
4
Auf vielen Tastaturen geben Strg-Leertaste oder Strg-@ oder Alt-0 eine NUL ein.
dubiousjim
2
@dodgethesteamroller Ich glaube, Sie irren sich über Schrägstrich (oder genauer, das Byte mit dem Wert 0x2F) in ext *. Tatsächlich glaube ich nicht, dass es überhaupt in das Dateisystem gelangen wird. Die VFS-Ebene lässt dies ungeachtet des Sicherungsspeichers nicht zu.
29.
3
Verwenden Sie einfach keine Leerzeichen in Dateinamen und Verzeichnisnamen. Selbst wenn es Ihr System technisch zulässt, wird es nur Ihr Leid verursachen. Verwenden Sie stattdessen den Unterstrich "_".
SnakeDoc
9

Ein Grund, um Groß- und Kleinschreibung in Dateinamen zu vermeiden, besteht darin, dass bei der Sortierung in Unix die Groß- und Kleinschreibung beachtet wird, sodass Dateien, die mit einem Großbuchstaben beginnen, nicht in der richtigen Reihenfolge angezeigt werden. Aus diesem Grund Makefilewird der Name normalerweise in Großbuchstaben geschrieben M- es handelt sich um eine der Dateien, die Sie zuerst anzeigen möchten, ohne sie zu scrollen oder zu überspringen a-l.

Das heißt, Sie können in Bezug auf Dateinamen viel schlimmer machen:

  • Durch die Verwendung von Leerzeichen werden einige schlecht geschriebene Programme und Skripte beschädigt, bei denen die Dateinamen nicht richtig angegeben werden
  • Das Starten eines Dateinamens mit einem -kann zu Problemen führen, da es in vielen Programmen als Befehlszeilenoption anstelle eines Dateinamens angezeigt wird (z. B. rm -rwird eine genannte Datei nicht entfernt -r).
  • Wenn Sie einen Dateinamen mit einem beginnen, .wird er vor vielen Dienstprogrammen und Shell-Globbing verborgen (z. B. rm *werden Dateien wie nicht entfernt .config).
  • Die Verwendung von Sonderzeichen wie |<>*?und sogar nicht druckbaren Zeichen wie newlineist technisch möglich, kann jedoch Skripte / Programme, die Leerzeichen ähneln, beschädigen. Der Unterschied besteht darin, dass das Leerzeichen häufig verwendet wird, sodass Programmierer dazu neigen, ihre Programme dagegen zu testen, während weniger beliebte Zeichen häufig nicht getestet werden.
Dmitry Grigoryev
quelle
4
Dies ist in der Regel nicht mehr der Fall, da bei der Sortierung in modernen Gebietsschemata heutzutage die Groß- und Kleinschreibung nicht mehr beachtet wird und viele Tools und Shell-Globbings das Gebietsschema für die Sortierung von Dateinamen berücksichtigen.
Stéphane Chazelas
2
Meinten Sie vielleicht: rm *werden keine Dateien wie entfernen .config?
Wildcard
1
@Wildcard nicht wirklich, aber vielleicht ist dein Beispiel realistischer als meins. Mein Ziel war es zu zeigen, dass Dateinamen, die mit einem Punkt beginnen, unempfindlich gegen Globbing sind, selbst wenn der Benutzer diesen Punkt explizit angibt.
Dmitry Grigoryev
1
@DmitryGrigoryev, nein, sind sie nicht. Versuchen Sie es mit ls -ald. ?? * in jedem Verzeichnis mit Punktdateien.
Bill Barth
1
Ich halte es für angemessener, zu sagen: "Wenn Sie sich für die Verwendung von Großbuchstaben in Dateinamen entscheiden, sollten Sie berücksichtigen, dass die Sortierreihenfolge in Unix (manchmal) zwischen Groß- und Kleinschreibung unterscheidet." Der Benutzer möchte dieses Verhalten Makefileund READMEist ein perfektes Beispiel dafür. Beachten Sie auch, dass dieser Effekt vernachlässigbar ist, wenn der Buchstabe nicht der erste Buchstabe im Namen ist. Wenn Sie camelCase verwenden, ist dies also keine große Sache. Sicher, es könnte Sie überraschen, es anOctagonvorher zu sehen angle, aber zumindest wären sie in der Liste zusammen.
G-Man sagt, dass Monica
6

Wenn Sie mit einer Windows-Umgebung arbeiten, sollten Sie Großbuchstaben vermeiden, da Windows alles in Kleinbuchstaben schreibt. Dies ist häufiger ein Problem in umgekehrter Richtung. Ein Link, Page_2.htmlder page_2.htmlin Windows zu finden ist , in Unix jedoch fehlschlägt.

NL_Derek
quelle
10
Das ist nicht wahr. Bei NTFS, VFAT und exFAT wird die Groß- und Kleinschreibung nicht beachtet, die Groß- und Kleinschreibung bleibt jedoch erhalten, dh die Groß- und Kleinschreibung wird zum Zwecke der Suche ignoriert, die Groß- und Kleinschreibung wird jedoch trotzdem gespeichert . Gleiches gilt für HFS +, das Standard-Dateisystem unter OSX. NTFS hat sogar einen POSIX-Namespace, der genau wie alle anderen Unices funktioniert, dh sehr lange Dateinamen von nicht interpretierten Oktetten, mit nur NULund /verboten.
Jörg W Mittag
5
Genauer gesagt ist "Groß- und Kleinschreibung wird nicht beachtet, Groß- und Kleinschreibung wird jedoch beibehalten" eine andere Möglichkeit, "Datei A stillschweigend zu überschreiben, da sich der Name nur in Groß- und Kleinschreibung von Datei B unterscheidet" (oder umgekehrt, je nachdem, welche Datei später gespeichert wurde). Mit anderen Worten, wenn Sie eine * nix-Shell verwenden, um auf eine NTFS-Freigabe zuzugreifen, cat > Foowird die Datei überschrieben foo. Dieses Verhalten ist wahrscheinlich unerwartet und verwirrend, wenn Sie an Dateisysteme mit Groß- und Kleinschreibung wie ext * gewöhnt sind.
dodgethesteamroller
1
@ JörgWMittag Wenn ich mich nicht irre, wird bei NTFS nicht zwischen Groß- und Kleinschreibung unterschieden. Windows funktioniert nur auf mysteriöse Weise.
Cthulhu
1
@Cthulhu: AFAIK, NTFS verfügt über vier verschiedene Namespaces, in denen Sie Namen für Dateien erstellen können. (Ich weiß jedoch nicht, ob eine einzelne Datei einen Namen in mehr als einem Namespace haben kann.) Ein "DOS" -Namespace (8.3, ohne Berücksichtigung der Groß- und Kleinschreibung), ein "langer" Namespace (ohne Berücksichtigung der Groß- und Kleinschreibung, ohne Berücksichtigung der Groß- und Kleinschreibung) UTF-16), ein spezieller Namensraum für „short long“ Namen, also Namen , deren Fall beibehalten werden sollte , sondern dass passen in 8,3, und ein POSIX - Namespace (ein Strom von Bytes ausgenommen \0und /, Groß- und Kleinschreibung). Zumindest erinnere ich mich daran. Aber ich stimme zu, dass es eine Art Durcheinander ist. Es gibt weitere Einschränkungen in der…
Jörg W Mittag
1
… Kernel und noch weitere Einschränkungen in der API (tatsächlich gibt es verschiedene APIs aus verschiedenen Epochen mit unterschiedlichen Einschränkungen), es gibt Einschränkungen aufgrund der Kompatibilität mit DOS und FAT, es gibt Einschränkungen im Befehlsinterpreter, es gibt Einschränkungen in der ( grafische) Shell, und es gibt Einschränkungen im Explorer. Und es ist oftmals unmöglich, zuverlässig festzustellen, woher eine Einschränkung kommt. Es ist verrückt. Ich habe es einmal geschafft, mit dem Explorer eine Datei zu erstellen , die mit keinem von mir ausgeführten Tool geöffnet, kopiert, verschoben, umbenannt oder gelöscht werden konnte. Es blieb im Grunde auf ...
Jörg W Mittag
4

Ein Grund zu vermeiden Kappen ist , dass bashs tabcompletion ist case-sensitive (zumindest Standard) -Das noch stellt mich jedes Mal , wenn ich vor einem Ende oben bashmit Standardkonfiguration. Natürlich gibt es auch andere populäre Shells, aber in Kombination mit der Tatsache, dass bashes sich bei vielen Betriebssystemen um die Standardanmeldeshell handelt, wird bei der Standardeinstellung häufig zwischen Groß- und Kleinschreibung unterschieden. Die Verwendung von Dateinamen in Kleinbuchstaben vereinfacht die Sache hier eher.

Schwarzlicht scheint
quelle
2
echo set completion-ignore-case On >> ~/.inputrckann ein bisschen helfen, zumindest auf Ihrem eigenen System.
wchargin
1
Mir ist nicht klar, worum es in dieser Antwort geht - es sei denn, Sie vergessen, wie Sie einen Dateinamen „buchstabiert“ haben. Wenn Sie beispielsweise eine Datei mit dem Namen Foound einem späteren Typ cat f(Tab) erstellen, schlägt dies fehl. Das Gleiche passiert jedoch, wenn Sie etwas eingeben cat foo, cat Foobaroder cat Fu- die Tatsache, dass Sie Probleme haben, auf eine Datei zuzugreifen, deren Namen Sie sich nicht richtig merken, hat eigentlich nichts mit der automatischen Vervollständigung zu tun.
G-Man sagt, dass Monica
@ G-Man Touché. Wenn Sie jedoch nur Dateinamen in Kleinbuchstaben verwenden, müssen Sie sich an eine Sache weniger erinnern.
Blacklight Shining
3

Da NL_Derek diese Dose Würmer geöffnet hat, sie aber nicht richtig artikuliert hat, sage ich Folgendes:

Es ist in Ordnung, Großbuchstaben zu verwenden, aber Sie sollten vermeiden, Dateien (im selben Verzeichnis) zu erstellen , die sich nur in Groß- File_Name.txt und Kleinschreibung unterscheiden , z. B. undfile_name.txt , weil

  • Wenn Sie das Verzeichnis für ein Windows-System verfügbar machen, kann es nicht auf beide Dateien zugreifen. Es kann wahrscheinlich nur auf denjenigen zugegriffen werden, der zuerst im Verzeichnis angezeigt wird, unabhängig davon, welchen Namen Sie verwenden. (Außer: Sie haben möglicherweise Zugriff auf sie als FILENA~1.TXTund FILENA~2.TXT - geben Sie ein, um dir /xzu sehen, welcher Kurzname (falls vorhanden) zu welchem ​​Langnamen passt.)
  • Wenn das Dateisystem tatsächlich ein Windows-Dateisystem ist (z. B. bereitgestellt von einem exFAT- oder NTFS-Dateisystem von einem NFS-Server unter Windows), dürfen die beiden Namen (wahrscheinlich) nicht gleichzeitig vorhanden sein. Wenn Sie dies beispielsweise tun und , erhalten Sie möglicherweise eine einzelne Datei, die die Ausgabe von enthält .cmd1 > foocmd2 > Foocmd2
  • Und falls Sie jemals übertragen Sie die Dateien auf einem Windows - System werden die beiden Namen (wahrscheinlich) nicht koexistieren werden. Wenn Sie beispielsweise ein Archiv (z. B. zip) mit den beiden Dateien erstellt und auf einem Windows-System extrahiert haben, würde die zweite Datei wahrscheinlich die erste Datei überschreiben. Gleiches gilt, wenn Sie diese auf eine Windows-Box mit FTP oder ähnlichem übertragen.
G-Man sagt, "Monica wiedereinsetzen"
quelle
Nicht nur Windows, sondern mehrere andere Betriebssysteme (VMS, denke ich, CP / M sicherlich, andere ...)
Toby Speight
3

Abgesehen von technischen Gründen habe ich einen praktischen Aspekt. Wenn Sie sich an Kleinbuchstaben halten, wird die Suche einfacher, es sei denn, Sie verwenden zu gern grep -i oder locate -i. Manchmal kann sogar camelCase verwirrend sein, wenn man eine Folge von Wörtern wie in storageNYCDCPrimary verwenden muss. Daher halte ich es für das Beste, Kleinbuchstaben beizubehalten und sie mit Unterstrichen oder Bindestrichen zu versehen, um die Lesbarkeit zu verbessern, beispielsweise storage_nyc_dc_primary.

Hopfender Hase
quelle
snake_case ist augenschonend - storageNycDcPrimaryund StorageNycDcPrimarybeide sind seltsam zu lesen.
go2null
1

Ich halte es für empfehlenswert, Groß- und Kleinschreibung in Dateinamen zu vermeiden .

Einige werden sagen, dass sie nicht einverstanden sind, aber es ist eine Sache oder was ich religiöse Überzeugungen nenne : Schwer zu diskutieren und zu vereinbaren. Diejenigen, die sich nicht einig sind, sagen, dass die meisten Werkzeuge jetzt als Kapitelle und als raumfreundliche Werkzeuge festgelegt sind: Sie haben Recht, aber das ist nicht die Frage.

Die richtige Frage ist, wie oft Sie Groß- und Kleinschreibung in Dateinamen verwenden müssen. Auf diese Frage, mit der Ausnahme , wenn ich in Java bin Programmierung ist die Antwort meist die ganze Zeit: Ich brauche keine Kapitelle und Räume in meinen Dateinamen . Alle Leerzeichen, die ich durch einen Unterstrich ( _) oder ein Minuszeichen ( -) ersetze , und aus diesem Grund benutze ich keine Kamel-Hülle (aka. CamelCase), die im Gegensatz zu anderen Religionen steht.

Viele Leute haben mich beschimpft, weil ich das getan und gelehrt habe - manche tun es immer noch -, manche sind mit einem Werkzeug gestolpert, das nicht kapital- / platzfreundlich war, und kamen zu mir und sagten, dass ich Recht habe und dass sie auf mich hätten hören sollen. Tun Sie , was Sie wollen , und wenn Sie im Dateinamen Groß- und Kleinbuchstaben und Leerzeichen verwenden, werden Sie hoffentlich nie mit einem schlecht geschriebenen Werkzeug stolpern. Wenn Sie jedoch mit einem solchen Tool arbeiten, wird es hoffentlich nicht schwer zu beheben sein und Ihr Unternehmen und / oder Sie viel Geld und / oder Zeit kosten. Aber wenn es schlimme Auswirkungen hat, werden Sie sich daran erinnern, dass einige Ihnen in der Vergangenheit gesagt haben, dass die Verwendung von Großbuchstaben und Leerzeichen in Dateinamen eine schlechte Praxis ist.

Und eine letzte Sache, wenn Sie alle Probleme vermeiden wollen , keine Sonderzeichen in Dateinamen (nur Kleinbuchstaben, Ziffern, Unterstriche und Minuszeichen [1]). Diese Liste unerwünschter Zeichen enthält auch alle nicht-ASCII-Zeichen (ja, Franzosen und andere nicht-englische Personen - und ich bin einer von ihnen - keine von diesen: à, â, ä, ç, é, ..., ö, æ, œ , ...). Dies erstreckt sich auch auf viele andere Dinge, einschließlich Login und Passwort . Ich werde Sie raten lassen, was passiert, wenn Sie ein Anführungszeichen oder ein Anführungszeichen ( 'oder ") in ein Login oder Passwort einfügen, das von einem Bash-Skript behandelt wird, das nicht von einem bestätigten Systemadministrator geschrieben wurde.

[1]: Vielleicht könnten wir erweitern das zu ~, @, #und einige andere, aber für Probleme sucht (und ja ich weiß , über Emacs - Dateien ...).

jfg956
quelle
1
Das Letzte ist etwas, das vom Authentifizierungssystem gehandhabt werden sollte, nicht der Benutzer, der das Passwort eingibt. Wenn das System die Anzahl der zulässigen Zeichen in Kennwörtern begrenzt, handelt es sich um ein fehlerhaftes System.
Blacklight Shining
Nun, das Begrenzen von Zeichen im Passwort ist ein Thema für Debatten: li1, oO0, ... je nach Vorliebe schwer zu kommunizieren. Einige würden sagen, dass das Passwort nicht mitgeteilt werden sollte, aber ein WiFi-Schlüssel ist eine Art Passwort, das ich meinen Freunden mitteile, wenn sie bei mir sind ...
jfg956
Dies ist eine bewusste Entscheidung von Ihrer Seite, um die Verwendung einiger Zeichen zu vermeiden, und keine Einschränkung des Systems (in diesem Beispiel die Wi-Fi-Standards, AP- und Client-Implementierungen usw.). Wenn Sie eine Zeichenfolge zufällig ausgewählter Zeichen als Kennwort verwenden, können Sie die Lesbarkeit verbessern, indem Sie eine Monospace-Schriftart verwenden (oder die Empfänger dazu auffordern), oder indem Sie einfach markantere Glyphen verwenden, wenn Sie sie handschriftlich schreiben (seriffierte Kleinbuchstaben) L, Großbuchstabe I und Ziffer 1, kleinerer Kleinbuchstabe O, runderer Großbuchstabe O, durchgestrichene oder gepunktete Ziffer 0 usw.). Alternativ können Sie eine Passphrase verwenden.
Blacklight Shining