web-dev-qa-db-fra.com

Limite sur la longueur du nom de fichier en bash

Les questions suivantes sont destinées à bash et linux uniquement:

  1. Y a-t-il une limite au nombre de caractères dans le nom de chemin absolu d'un fichier?
  2. Le nombre de caractères du nom de fichier (sans extension) est-il limité?

Si oui, quelles pourraient être ces limites? Comment puis-je y accéder s'ils sont spécifiques au système?

68
Sriram

Cela dépend beaucoup du système de fichiers. Pour le poste FS (actuellement le plus utilisé sous Linux):

  • longueur maximale du fichier: 255 octets
  • longueur maximale du chemin: aucune

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.

60
e-satis

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.

36
dogbane

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
14
tim

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:

Pour obtenir dynamiquement ces propriétés dans bash :

  • Créez un nom de fichier (ou chemin d'accès) de plus en plus long comme expliqué par dogbane
  • Utilisez la commande getconf proposée par tim , également disponible sous Linux:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    
10
olibre

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.

8
  1. 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:

  1. 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 */
3
David Balažic

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.

2
Eugene Yarmash

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.

2
ncmathsadist

Pour info, sur Docker, la limite de nom de fichier est actuellement 242 caractères .

1
jp.rider63