Limite sur la longueur du nom de fichier dans bash
les questions suivantes sont destinées à bash et linux seulement:
- y a-t-il une limite au nombre de caractères dans le nom de chemin absolu d'un fichier?
- y a-t-il une limite au nombre de caractères pour le nom du fichier (sans extension) seulement?
dans l'affirmative, quelles pourraient être ces limites? Comment puis-je y accéder s'ils sont spécifiques au système?
9 réponses
cela dépend beaucoup du système de fichiers. Pour l'extérieur (actuellement le plus utilisé sur Linux):
- max filename longueur: 255 octets
- longueur maximale du trajet: aucune
l'extension n'est pas quelque chose que le FS connaît, il 255 octets, extension incluse (vous pouvez avoir des noms de fichiers sans aucune extension).
ici est une liste plus exhaustive de ces limites, par FS.
il peut également y avoir des extensions à votre système de fichiers qui peuvent changer votre longueur maximale ainsi. Par exemple, eCryptFS qui 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 l'entrée Ubuntu eCryptFS launchpad .
Dans un répertoire temp, exécutez:
num=1
while [ true ]
do
if ! touch $(printf "%${num}s" | tr ' ' 'a')
then
echo $num
break
fi
((num++))
done
et j'obtiens:
touch: cannot touch `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long
256
ce qui signifie que ma limite est 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 upvote them.
sur Linux, la longueur des noms de fichiers et des chemins dépend de:
- système de fichiers des limites comme l'a déclaré le 1519130920" eugène y et ncmathsadist ;
- constante définie dans
linux/limits.h
avant compilation comme indiqué par Michael Aaron Safyan et plus tard David Balažic a pointé vers une question similaire .
pour obtenir dynamiquement ces propriétés dans bash :
la spécification UNIX unique mentionne NAME_MAX
et PATH_MAX
constantes dans limites.h qui peut être lu avec pathconf . Cependant, ceci est très dépendant du système de fichiers, et il est peu probable que vous atteigniez une telle limite.
NOTE: en tant que programmeur, vous ne devez pas coder ces limites. Vous devez utiliser l'allocation dynamique, de sorte qu'il sera toujours tant que le système sous-jacent permet pour ce que vous faites.
- y a-t-il une limite au nombre de caractères dans le nom de chemin absolu d'un fichier?
Oui, il y en a.
Voir répondre par la sfp à la question nom de fichier des limites de longueur sur linux? sur le serveur "1519150920 la" faute
en bref:
#define PATH_MAX 4096 /* # chars in a path name including nul */
et pour:
- y a-t-il une limite au nombre de caractères pour le nom du fichier (sans extension) seulement?
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 nom de fichier maximale de 256 octets et une longueur de chemin illimitée.
Voir Comparaison des systèmes de fichiers pour plus d'.
ce n'est pas dépendant de bash, c'est dépendant de OS. Sur un mac, c'est 0xff pour un nom de fichier et 0x400 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 le Panneau, le nom de fichier limite est actuellement de 242 caractères .