Ayant utilisé les systèmes Windows depuis longtemps, je sais qu'à un certain moment, une fenêtre d'erreur peut apparaître lorsque les noms de fichiers et de dossiers deviennent trop longs.
Cela m'est arrivé lorsque j'ai essayé de sauvegarder des fichiers avec SFTP d'un serveur vers un dossier (par exemple):
D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png
Comme vous pouvez le voir, j'ai tendance à créer des chemins de dossier très spécifiques parfois et si un nom de fichier est également long, NTFS pourrait ne pas être en mesure de l'enregistrer de cette façon.
Je m'inquiète actuellement de mes sauvegardes physiques, car le chemin du dossier sur mon lecteur de sauvegarde s'ajoutera /backups/(drive name)/...
à tous les chemins de fichiers.
Existe-t-il une telle limite (ou une limite similaire) dans ext4 / Ubuntu que je devrais rechercher?
la source
Réponses:
La longueur maximale du nom de fichier est de 255 octets. Trouvé dans le page wiki d'ext4 .
Et un chemin maximum de 4096 caractères. Trouvé dans cette question Unix et Linux SE .
Cependant, j'ai trouvé cet article wiki qui ne spécifie pas de chemin de fichier max dans ext4.
la source
jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7
-m compte les caractères et -c compte les octets. La raison pour laquelle il est 7 au lieu de 6 est le caractère de fin de ligne qui n'est pas imprimé. Le nombre total de caractères dans le nom de fichier sera donc de 255.4
pourecho -n "💩" | wc -c
. La création d'un nom de fichier appelé avec ce nom prendrait 4 octets malgré le fait que ce nom de fichier ait 1 graphe. Un "caractère" n'est pas un concept clairement défini (il signifie généralement octet, graphème ou point de code UNICODE).len(filename.encode())
.Je crois que le moyen le plus fiable de déterminer cela est avec la
pathconf(".", _PC_PATH_MAX);
fonction POSIX, qui détermine le chemin maximum pour un chemin donné.Comme la fonction le suggère, cela peut varier selon les systèmes de fichiers.
Je ne connais pas d'utilitaire de ligne de commande qui l'expose cependant. Voici un exemple C minimal: /programming/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296 # 54155296
la source
Les limites de chemin dépendent du système de fichiers utilisé. La réponse de jtoscarson couvre ext4 qui est par défaut sur Ubuntu, cependant vous pouvez utiliser une variété de systèmes de fichiers sur Ubuntu. Pour citer la réponse de WerkkreW sur la défaillance du serveur, voici quelques-uns des systèmes de fichiers et leurs limites:
Notez également que divers systèmes de fichiers ont des limitations quant au type de caractère pouvant être présent dans le nom de fichier. Par exemple, les noms de fichiers dans
ext4
ne peuvent pas contenir NULL et/
. Voir aussi l'article Wikipedia pour les comparaisons de systèmes de fichiers .Notez également que les systèmes de fichiers Linux doivent prendre en considération les définitions POSIX :
De limits.h :
la source
Comme l'a dit @ sergiy-kolodyazhnyy, la longueur maximale du nom de fichier dépendra du système de fichiers et la grande majorité limitera la longueur des noms de fichiers à 255 octets.
Une omission notable de sa carte est les supports optiques. Alors que UDF et les extensions Rock Ridge ont la même limite de 255 caractères pour les noms de fichiers, ISO9660 sans Rock Ridge et Joliet ont tous deux des limites beaucoup plus strictes que vous pourriez réellement rencontrer si vous faites quelque chose comme la sauvegarde
youtube-dl
téléchargements.Les noms de fichiers Joliet sont limités à 64 points de code UTF-16 ou à 103 d'entre eux si votre programme de mastering de disque a la possibilité de rompre avec les spécifications d'une manière qui ne semble pas causer de préjudice en pratique.
De même, les niveaux ISO 9660 2 et 3, sans les extensions Rock Ridge, sont limités à des noms de fichiers de 31 caractères ou 37 si vous jouez rapidement et librement avec la spécification.
ISO 9660: 1999, qui est prise en charge par genisoimage mais pas par des frontaux comme K3b, a une limite de 207 octets (sans Rock Ridge) ou 197 octets (avec Rock Ridge).
(Source: la
genisoimage
page de manuel)Quant à la longueur maximale du chemin , c'est une grosse idée fausse. Il n'y en a pas pour la plupart des systèmes de fichiers Linux.
Il y a une constante du nom
PATH_MAX
, mais il est seulement le maximum pour certaines API POSIX , que vous pouvez travailler autour .Les seules exceptions consécutives à cette convention "aucune limite sur la longueur du chemin" sont FAT32 et exFAT (32 760 caractères Unicode), NTFS et ReFS (32 767 caractères Unicode), UDF (1 023 octets) et ISO 9660 (peu clair, mais j'ai vu il indique 180, 207, 212 ou 222 octets).
Cela peut être facilement démontré en exécutant ce petit programme Python, puis en explorant les répertoires résultants.
My
bash
, qui affiche tout le chemin dans l'invite, aura des problèmes avec cela. Cependant, monzsh
, qui n'affiche que le dossier actuel dans l'invite, n'aura aucun problème et a même unpwd
intégré qui peut afficher l'intégralité du chemin de 5000 + octets sans problème.la source