Die folgenden Fragen sind nur für Bash und Linux gedacht:
- Gibt es eine Begrenzung für die Anzahl der Zeichen im absoluten Pfadnamen einer Datei?
- Gibt es eine Begrenzung für die Anzahl der Zeichen nur für den Dateinamen (ohne Erweiterung)?
Wenn ja, wie hoch könnten diese Grenzen sein? Wie kann ich auf sie zugreifen, wenn sie systemspezifisch sind?
Antworten:
Es hängt sehr stark vom Dateisystem ab. Für den ext FS (derzeit am häufigsten unter Linux verwendet):
Die Erweiterung ist dem FS nicht bekannt, sie umfasst 255 Byte, einschließlich der Erweiterung (Sie können Dateinamen ohne Erweiterungen verwenden).
Hier ist eine ausführlichere Liste dieser Grenzwerte pro FS.
Es kann auch Erweiterungen für Ihr Dateisystem geben, die auch Ihre maximale Länge ändern können. Zum Beispiel eCryptFS, das einen Teil des unteren Dateinamens verwendet, um Metadaten zu speichern, und den Dateinamen auf eine maximale Länge von 143 Zeichen begrenzt. Siehe Ubuntu eCryptFS-Launchpad- Eintrag.
quelle
ecryptfs
, konnte ich überprüfen, ob der Fehler immer noch ungelöst ist (obwohl ich beim Lesen des Fehlers selbst denke, dass er niemals behoben wird)Führen Sie in einem temporären Verzeichnis Folgendes aus:
num=1 while [ true ] do if ! touch $(printf "%${num}s" | tr ' ' 'a') then echo $num break fi ((num++)) done
und ich bekomme:
touch: cannot touch `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long 256
was bedeutet, dass mein Limit 255 ist.
quelle
Unter Mac OS X 10.6.7:
man getconf getconf NAME_MAX / # 255 bytes getconf PATH_MAX / # 1024 bytes # check file path length with wc before using touch, mkdir, etc. echo '/very/lllooooonnnnnggggg/file/path.txt' | wc -c
quelle
Ich verweise auf andere Antworten, bitte stimmen Sie ihnen zu.
Unter Linux hängt die Länge von Dateinamen und Pfadnamen ab von:
linux/limits.h
vor der Zusammenstellung definiert wurde, wie von Michael Aaron Safyan und später David Balažic angegeben, hat auf eine ähnliche Frage hingewiesen .Um diese Eigenschaften dynamisch zu erhalten Bash::
Verwenden Sie den
getconf
von tim vorgeschlagenen Befehl , der auch unter Linux verfügbar ist:quelle
Die Single UNIX-Spezifikation erwähnt
NAME_MAX
undPATH_MAX
Konstanten in limit.h , die mit pathconf gelesen werden können . Dies ist jedoch sehr dateisystemabhängig, und es ist unwahrscheinlich, dass Sie eine solche Grenze erreichen.HINWEIS: Als Programmierer sollten Sie diese Grenzwerte nicht fest codieren. Sie sollten die dynamische Zuordnung verwenden, damit sie immer funktioniert, solange das zugrunde liegende System alles zulässt, was Sie tun.
quelle
Ja da ist.
Siehe Antwort von sfp unter der Frage Dateinamenlängenbeschränkungen unter Linux? bei Serverfehler
Zusamenfassend:
#define PATH_MAX 4096 /* # chars in a path name including nul */
Und für:
in der gleichen verknüpften Antwort:
#define NAME_MAX 255 /* # chars in a file name */
quelle
linux/limits.h
. Aber die ultimative Antwort wäre so etwas wiecat /proc/sys/fs/file-max
oder ...getconf NAME_MAX /
... Ja, der letzte Befehl ist der gute ... und Tim, wie er vor mir gefunden wurde. ProstDies hängt vom verwendeten Dateisystem ab. Zum Beispiel hat ext4 eine maximale Dateinamenlänge von 256 Bytes und eine unbegrenzte Pfadnamenlänge.
Weitere Informationen finden Sie unter Vergleich von Dateisystemen .
quelle
Dies ist nicht bash-abhängig; Es ist vom Betriebssystem abhängig. Auf einem Mac ist es 0xff für einen Dateinamen und 0x400 für einen Pfadnamen. Ubuntu 9 hatte ein Limit von 144 Zeichen für Dateinamen.
Ich habe diesen Link in Wikipedia gefunden . Hier werden Pfad- und Dateinamenbeschränkungen für zahlreiche Dateisysteme angegeben.
quelle
Zu Ihrer Information, in Docker beträgt das Dateinamenlimit derzeit 242 Zeichen .
quelle