Les questions suivantes sont destinées à bash et linux uniquement:
Si oui, quelles pourraient être ces limites? Comment puis-je y accéder s'ils sont spécifiques au système?
Cela dépend beaucoup du système de fichiers. Pour le poste FS (actuellement le plus utilisé sous Linux):
L'extension n'est pas quelque chose dont FS est au courant, mais 255 octets, extension incluse (vous pouvez avoir des noms de fichier sans extension).
Ici est une liste plus exhaustive de ces limites, par FS.
Il peut également y avoir des extensions de votre système de fichiers qui peuvent également modifier votre longueur maximale. Par exemple, eCryptFS utilise une partie du nom de fichier inférieur pour conserver les métadonnées et limite le nom de fichier à une longueur maximale de 143 caractères. Voir tableau de bord Ubuntu eCryptFS entrée.
Dans un répertoire temporaire, exécutez:
num=1
while [ true ]
do
if ! touch $(printf "%${num}s" | tr ' ' 'a')
then
echo $num
break
fi
((num++))
done
et je reçois:
touch: cannot touch `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long
256
ce qui signifie que ma limite est de 255.
Sur 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
Je me réfère à d'autres réponses, s'il vous plaît les inviter.
Sous Linux, les longueurs de nom de fichier et de chemin d'accès dépendent de:
linux/limits.h
avant la compilation comme indiqué par Michael Aaron Safyan et plus tard David Balažic a pointé ne question similaire .Pour obtenir dynamiquement ces propriétés dans bash :
La spécification UNIX unique mentionne NAME_MAX
et PATH_MAX
_ constantes dans limits.h pouvant être lues avec pathconf . Cependant, cela dépend beaucoup du système de fichiers et il est peu probable que vous atteigniez une telle limite.
REMARQUE: en tant que programmeur, vous ne devez pas coder en dur ces limites. Vous devez utiliser l'allocation dynamique, de sorte qu'elle fonctionne toujours tant que le système sous-jacent vous permet de faire n'importe quoi.
- Y a-t-il une limite au nombre de caractères dans le nom de chemin absolu d'un fichier?
Oui il y a.
Voir réponse par sfp à la question Limites de longueur de nom de fichier sur linux? sur le serveur en défaut
En bref:
#define PATH_MAX 4096 /* # chars in a path name including nul */
Et pour:
- Le nombre de caractères du nom de fichier (sans extension) est-il limité?
dans la même réponse liée:
#define NAME_MAX 255 /* # chars in a file name */
Cela dépend du système de fichiers utilisé. Par exemple, ext4 a une longueur de fichier maximale de 256 octets et une longueur de chemin d'accès illimitée.
Voir Comparaison des systèmes de fichiers pour plus d'informations.
Ce n'est pas dépendant de Bash; cela dépend du système d'exploitation. Sur un mac, c'est 0xff pour un nom de fichier et 0x400 ou plus pour un nom de chemin. Ubuntu 9 avait une limite de 144 caractères pour les noms de fichiers.
J'ai trouvé ce lien dans Wikipedia . Il indique les limites de chemin et de nom de fichier pour de nombreux systèmes de fichiers.
Pour info, sur Docker, la limite de nom de fichier est actuellement 242 caractères .