Nachdem ich Windows-Systeme lange Zeit verwendet habe, weiß ich, dass zu einem bestimmten Zeitpunkt ein Fehlerfenster angezeigt werden kann, wenn Dateien und Ordnernamen zu lang werden.
Dies ist mir passiert, als ich versucht habe, Dateien mit SFTP von einem Server in einen Ordner in (zum Beispiel) zu sichern:
D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png
Wie Sie sehen, neige ich manchmal dazu, sehr spezifizierte Ordnerpfade zu erstellen, und wenn ein Dateiname ebenfalls lang ist, kann NTFS ihn möglicherweise nicht auf diese Weise speichern.
Ich mache mir derzeit Sorgen um meine physischen Sicherungen, da der Ordnerpfad auf meinem Sicherungslaufwerk /backups/(drive name)/...
allen Dateipfaden hinzugefügt wird .
Gibt es eine solche Grenze (oder eine ähnliche) in ext4 / Ubuntu, auf die ich achten müsste?
quelle
Antworten:
Die maximale Dateinamenlänge beträgt 255 Byte. Gefunden in der Wiki-Seite für ext4 .
Und ein maximaler Pfad von 4096 Zeichen. Gefunden in dieser Unix & Linux SE Frage .
Obwohl ich diesen Wiki-Artikel gefunden habe , der keinen maximalen Dateipfad in ext4 angibt.
quelle
jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7
Das -m zählt Zeichen und das -c zählt Bytes. Der Grund, warum es 7 statt 6 ist, ist das Zeilenendezeichen, das nicht gedruckt wird. Die Gesamtzahl der Zeichen im Dateinamen beträgt also 255.4
für zurückgegebenecho -n "💩" | wc -c
. Das Erstellen eines Dateinamens mit diesem Namen würde 4 Byte dauern, obwohl dieser Dateiname 1 Graphem lang ist. Ein "Zeichen" ist kein klar definiertes Konzept (normalerweise bedeutet es Byte, Graphem oder UNICODE-Codepunkt).len(filename.encode())
.Ich glaube, dass der zuverlässigste Weg, dies zu bestimmen, die
pathconf(".", _PC_PATH_MAX);
POSIX-Funktion ist, die den maximalen Pfad für einen bestimmten Pfad bestimmt.Wie die Funktion vorschlägt, kann dies zwischen den Dateisystemen variieren.
Ich kenne kein Befehlszeilenprogramm, das es verfügbar macht. Hier ist ein minimales C-Beispiel: /programming/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296 # 54155296
quelle
Die Pfadnamenbeschränkungen hängen vom verwendeten Dateisystem ab. Die Antwort von jtoscarson bezieht sich auf ext4, das unter Ubuntu Standard ist. Sie können jedoch unter Ubuntu verschiedene Dateisysteme verwenden. Um die WerkkreW-Antwort auf Serverfehler zu zitieren , sind hier einige der Dateisysteme und ihre Grenzen aufgeführt:
Beachten Sie auch, dass verschiedene Dateisysteme Einschränkungen hinsichtlich des Zeichentyps im Dateinamen haben. Beispielsweise dürfen Dateinamen in
ext4
NULL und nicht enthalten/
. Siehe auch Wikipedia-Artikel für Dateisystemvergleiche .Beachten Sie auch, dass Linux-Dateisysteme POSIX-Definitionen berücksichtigen müssen :
Von Grenzen.h :
quelle
Wie @ sergiy-kolodyazhnyy sagte, hängt die maximale Dateinamenlänge vom Dateisystem ab und die überwiegende Mehrheit begrenzt die Dateinamenlängen auf 255 Bytes.
Eine bemerkenswerte Auslassung in seinem Diagramm sind optische Medien. Während UDF und die Rock Ridge-Erweiterungen für Dateinamen dieselbe Beschränkung von 255 Zeichen haben, gelten für ISO9660 ohne Rock Ridge und Joliet viel strengere Beschränkungen, auf die Sie möglicherweise tatsächlich stoßen, wenn Sie beispielsweise
youtube-dl
Downloads sichern.Joliet-Dateinamen sind entweder auf 64 UTF-16-Codepunkte oder auf 103 davon beschränkt, wenn Ihr Disc-Mastering-Programm die Option hat, auf eine Weise von der Spezifikation abzuweichen, die in der Praxis keinen Schaden zu verursachen scheint.
Ebenso sind ISO 9660 Level 2 und 3 ohne die Rock Ridge-Erweiterungen auf Dateinamen mit 31 oder 37 Zeichen beschränkt, wenn Sie schnell und locker mit der Spezifikation spielen.
ISO 9660: 1999, das wird von genisoimage unterstützt , aber nicht von Frontends wie K3b, hat eine Grenze von entweder 207 Bytes (ohne Rock Ridge) oder 197 Bytes (mit Rock Ridge).
(Quelle: Die
genisoimage
Manpage)Die maximale Pfadlänge ist ein großes Missverständnis. Für die meisten Linux-Dateisysteme gibt es keine.
Es gibt eine Konstante mit dem Namen
PATH_MAX
, aber es ist nur das Maximum für bestimmten POSIX - APIs , die Sie arbeiten , um .Die einzigen konsequenten Ausnahmen von dieser Konvention "Keine Begrenzung der Pfadlänge" sind FAT32 und exFAT (32.760 Unicode-Zeichen), NTFS und ReFS (32.767 Unicode-Zeichen), UDF (1.023 Byte) und ISO 9660 (unklar, aber ich habe gesehen es wird als 180, 207, 212 oder 222 Bytes angegeben).
Dies kann leicht demonstriert werden, indem dieses kleine Python-Programm ausgeführt und anschließend die resultierenden Verzeichnisse untersucht werden.
My
bash
, das den gesamten Pfad in der Eingabeaufforderung anzeigt, wird Probleme damit haben. Meinezsh
, die nur den aktuellen Ordner in der Eingabeaufforderung anzeigt, hat jedoch keine Probleme und verfügt sogar über eine integriertepwd
Funktion, die den gesamten Pfad mit mehr als 5000 Byte problemlos anzeigen kann.quelle