Ist es üblich, dass der Ordnername einen Punkt (.) Enthält? Wie wäre es mit Dateinamen mit mehreren Punkten?

28

Manchmal ist es praktisch sinnvoll, wenn ein Ordnername einen Punkt (.) Enthält. Beispielsweise speichern Sie Daten für ein Experiment, das bei L = 0,5 durchgeführt wurde. So könnte der Ordner heißen:

experiment_L0.5

Ein ähnliches Problem kann bei Dateinamen auftreten. Beispielsweise:

file_L0.5.txt

Ist das eine schlechte Praxis, wenn Sie in Ubuntu arbeiten? Wie wäre es, wenn Sie diese Verzeichnisse für einen Windows-Benutzer freigeben?

Vielen Dank!

Hamid
quelle
5
Wenn der Punkt das erste Zeichen ist, wird der Ordner ausgeblendet. Davon abgesehen denke ich nicht, dass es wichtig ist.
user3121023

Antworten:

37

Soweit ich weiß, gibt es keine Probleme bei der Benennung von Ordnern und Dateien mit einem oder mehreren Punkten.

Ubuntu verwendet in der Regel keinen Punkt und keine drei Zeichen (z. B. .txt), um den Dateityp zu identifizieren. Das hat also im Ubuntu-Kontext keine besondere Bedeutung. Dies ist nützlich, wenn Sie Dateien mit Windows teilen. Ubuntu verwendet Magic Numbers in den ersten Bytes der Datei, um den Dateityp zu identifizieren. Allerdings Nautilus. Ignoriert die magischen Zahlen, wenn die Erweiterung "Punkt" und "Drei Zeichen" zur Identifizierung des Dateityps verfügbar ist. Diese Einstellung kann geändert werden. Siehe Nautilus zwingen, Erweiterungen zu ignorieren

Wenn Sie in Ubuntu einen Datei- oder Ordnernamen mit einem Punkt beginnen, z. B. .experiment_L0.5, wird die Datei oder der Ordner ausgeblendet. Sie können die Anzeige versteckter Dateien umschalten, indem Sie in Nautilus Ctrl+ drücken H. In Windows ein Dateiname, der mit a beginnt. ist nicht versteckt. Wenn Sie also eine versteckte Datei mit dem Namen .experiment_L0.5in ein Windows-System übertragen, ist sie deutlich sichtbar.

In Ubuntu kann ein Dateiname mit einem Punkt enden, da am Ende keine besondere Bedeutung steht. In Windows werden Dateiname und Erweiterung jedoch durch einen Punkt getrennt, und ein Dateiname, der mit einem Punkt endet, aber keine Erweiterung enthält, ist nicht zulässig. Als ich versuchte, eine solche Datei in Windows zu erstellen, erhielt ich eine Datei mit nur dem Namen, ohne Punkt und ohne Erweiterung.

Referenz: Wiki zu Dateinamen

Hoffe das hilft.

user68186
quelle
4
Das ist richtig. Wenn Sie Dateien für Windows freigeben, müssen Sie das Doppelpunktzeichen vermeiden, das :in Windows-Dateinamen nicht zulässig ist und Probleme verursacht ( und das auch ). Siehe auch hier .
Rmano
Vielen Dank @Rmano. Ich habe in meiner Antwort einen Link zum Wiki hinzugefügt.
user68186
1
In Bezug auf die Kompatibilität denke ich, dass ein abschließender Punkt (wie fname.) auch in Windows nicht zulässig ist.
Rmano
Nochmals vielen Dank @Rmano. Ich habe ein paar schnelle Tests durchgeführt und konnte keine Datei mit dem Namen test.Windows erstellen . Ich werde meine Antwort aktualisieren.
user68186
1
Hinzufügen zu Rmanos Kommentar - Dies kann ein Problem bei Ubuntu sein, wenn Sie ein Windows-Laufwerk über VirtualBox installiert haben. Der Versuch, einen Namen mit einem nachgestellten Punkt in mkdir einzufügen, schlägt mit 'Protokollfehler' fehl.
Bvanlew
11

Die kurze Antwort

  • Windows lässt die folgenden Zeichen nicht zu: <>:"/\|?*( Quelle )
  • Weitere Zeichen, von denen abgeraten wird, sind: Leerzeichen und Punkt .( Quelle )
    • Befehlszeilentools sind schwieriger zu verwenden, wenn Sie Leerzeichen in Namen haben (schwieriger, nicht unmöglich)
    • Punkte werden in RegEx verwendet (z. B. wenn Sie verwenden möchten grep). Ein führender Punkt verbirgt eine Datei unter Linux. In Windows werden Punkte in der Dateierweiterung verwendet, die für die Dateityperkennung verwendet wird.
  • Windows wird auch nicht zulassen , dass Dateinamen CON, PRN, AUX, CLOCK$, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, und LPT9. ( Quelle )
  • Die einzigen Zeichen, die in Unix-Dateisystemen, die ich kenne, nicht zulässig sind, sind /und null (das Null-Byte \0).
  • Siehe auch: Dateisystembeschränkungen (Ich weiß nicht, mit welchem ​​Windows Sie kompatibel sein möchten).

Die lange Antwort

Technischer Hintergrund: Dateisystem

Ubuntu nutzt das ext4Dateisystem. Ein Dateisystem verfolgt, wo Dateien auf dem zugrunde liegenden Speicher (Festplatte oder SSD oder was auch immer) gespeichert sind, Berechtigungen in Form von Eigentümer / Gruppe / Andere können lesen / schreiben / ausführen, Zeitstempel, Name.

Das Dateisystem strukturiert den verfügbaren Speicher. Der erste Block heißt "Superblock". Dieser Block wird zum Mounten eines Dateisystems verwendet. Soweit ich weiß, teilt jedes moderne Dateisystem seinen Speicherplatz in Blöcke. Ich denke (und ich bin mir nicht sicher), dass die meisten Dateisysteme auch eine feste Blockgröße haben, obwohl die Blockgröße konfiguriert werden kann, wenn das Dateisystem erstellt wird. ext4 (und auch ext2 und ext3) verwenden sogenannte "Inodes" für Dateien und Verzeichnisse. Diese Inodes enthalten Zeiger auf andere Blöcke (dies können auch Inodes oder "Datenblöcke" sein). Und der "erste" Inode einer Datei enthält alle Informationen, die ich oben erwähnt habe.

Eine andere Information ist der "Typ" der Datei. "Typ" kann sein:

  • reguläre Datei
  • Verzeichnis
  • Gerätedatei (Block- oder Zeichengerät)
  • ...

Tatsächlich können Sie Verzeichnisse auch mit einem Editor öffnen:

vim /home

Da das Verzeichnis nicht den vollständigen Pfad enthält, sondern nur die Namen des Inhalts, sehe ich keinen Grund, warum Dateien keine enthalten können /. Ich denke, es könnte praktisch sein. (Weiß jemand warum /das nicht erlaubt ist?)

Bei anderen Dateisystemen ist das jedoch anders. Die FAT16 und FAT32 verwendeten eine sogenannte "Dateizuordnungstabelle". Dies bedeutet, dass es eine Tabelle gibt, die alle Dateien enthält, die in Ihrer Datei gespeichert sind, bei welchem ​​"Cluster" sie beginnen und bei welchem ​​Cluster sie als einfach verknüpfte Liste enden.

Das Wichtige, was ich Ihnen sagen wollte, ist, dass nicht zugelassene Zeichen auch vom Dateisystem abhängen können.

Technischer Hintergrund: Dateitypen

  • Windows verwendet Dateierweiterungen, um Dateitypen zu erkennen
  • Linux verwendet "Magic Bytes", um Dateitypen zu erkennen. Magic Bytes sind Teil des Inhalts der Datei und daher völlig unabhängig vom Namen. Diese Bytes sind Teil der Spezifikation des Dateityps (siehe png-Spezifikation als Beispiel). Es werden auch die Dateinamenerweiterungen für Dateien mit denselben magischen Bytes wie .txtoder .html(beide sind Textdateien) verwendet.

verbunden

Martin Thoma
quelle
Ihre Vermutung, wie FAT Dateinamen speichert, ist nicht ganz richtig: en.wikipedia.org/wiki/FAT32#File_Allocation_Table - das aktuelle "FAT" speichert die Liste der Cluster , während Verzeichnisse eine Liste der Dateinamen mit einem Zeiger auf den ersten Cluster von speichern eine Datei, ähnlich wie Sie ext4 beschreiben. :) Auch .txtund .htmlDateien haben in der Tat unterschiedliche "magische Werte" - versuchen Sie eine HTML-Datei umzubenennen test.txtund auszuführen file test.txt. Es hat nicht viel Relevanz für die ursprüngliche Frage, aber immer noch :)
Sergey
1
Danke, ich habe den falschen Teil über FAT entfernt. über die magischen Werte und file: fileVerwendet nicht nur magische Werte, um den Typ einer Datei zu bestimmen. Jede gültige HTML-Datei ist eine Textdatei (in dem Sinne, dass sie lesbare Zeichen enthält), aber nicht jede gültige Textdatei ist eine gültige HTML-Datei (in dem Sinne, dass sie gegen W3C-Validatoren validiert). Viele Dateitypen (html, xml, csv, js, php, c, h, cpp, ...) sind also Textdateien. Nur Binärdateien haben magische Bytes, die sich an genau definierten Positionen befinden. Alle oben genannten Dateien können vor dem Inhalt ein beliebiges Leerzeichen enthalten.
Martin Thoma
5

Der Vollständigkeit halber sind die Namen, die nur aus einem .oder zwei Punkten ..bestehen, besonders:

  • . verweist auf das aktuelle Verzeichnis
  • .. verweist auf das übergeordnete Verzeichnis

Diese Einträge werden automatisch hinzugefügt und sind immer vorhanden, sodass Sie keine Datei mit dem Namen .oder haben können ...

Sergey
quelle
Guter Punkt. Dies gilt sowohl für Windows als auch für Ubuntu.
User68186
1

Dies spielt keine Rolle, weder unter Linux noch unter Windows.

Es ist eine gängige Praxis, einen Ordner mit dem Namen "program.d" zu haben - um die Konfiguration und die Daten für ein Programm zu speichern (siehe Verzeichnis / etc).

Ohad Cohen
quelle
0

Die Benennung von Dateien ist in Unix- und Linux-Dateisystemen sehr flexibel. Der einzige Dateiname, den Sie nicht haben können, ist ein Null- Zeichen oder der /Name mit einem . Es wäre jedoch sicher eine gute Praxis, die Verwendung von Zeichen zu vermeiden, die aus Sicht der Namensportabilität in anderen Systemen verboten / reserviert sind. " * : < > ? \ / |Zum Beispiel sollten Sie keine Zeichen (eingeschränkt durch NTFS) in Ihrem Dateinamen verwenden, wenn Sie in einem Windows-System auf die Datei zugreifen möchten.

Und über die Verwendung eines .(Punktes) in Dateiname , denke ich, sollte es in Ordnung sein, da es in keinem der Systeme ein "reserviertes" Zeichen zu sein scheint (mit Ausnahme von OpenVMS, MS-DOS und Windows, in denen es verwendet wird) Datei- / Verzeichnisname ist zulässig, aber das letzte Vorkommen wird als Erweiterungstrennzeichen in VMS, MS-DOS und Windows interpretiert, wie im folgenden Wikipedia-Link angegeben:

In anderen Systemen, die normalerweise als Teil des Dateinamens betrachtet werden, kann mehr als ein Punkt zulässig sein. Unter Unix bedeutet ein vorangestellter Punkt, dass die Datei oder der Ordner normalerweise ausgeblendet ist.

präzise
quelle