85 votes

Limite sur la longueur du nom de fichier dans bash

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

  1. Est-il une limite sur le nombre de caractères dans le chemin d'accès absolu d'un fichier?
  2. Est-il une limite sur le nombre de caractères pour le nom de fichier (sans l'extension)?

Si oui, quelles pourraient être ces limites? Comment puis-je accéder dans le cas où ils sont spécifiques au système?

83voto

e-satis Points 146299

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

  • max filename longueur: 255 octets
  • max longueur de chemin d'accès: aucun

L'extension n'est pas quelque chose que le FS est conscient de, c'255 octets, extension inclus (vous pouvez avoir des noms de fichier sans extension).

Ici est une liste plus exhaustive de ces limites, par FS.

Il peut aussi être une extension de votre système de fichiers qui peuvent changer votre longueur maximale. Par exemple, eCryptFS qui utilise une partie de la baisse de nom de fichier pour conserver les métadonnées et les limites le nom du fichier à une longueur maximale de 143 caractères. Voir Ubuntu eCryptFS launchpad entrée.

45voto

dogbane Points 85749

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 de 255.

17voto

tim Points 71

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

14voto

olibre Points 6069

Je me réfère à d'autres réponses, merci d'upvote.

Sur Linux, le nom de fichier et chemin d'accès longueurs dépend :

Dynamiquement pour obtenir ces propriétés dans :

  • Créer un nom de fichier (ou chemin) de plus en plus longtemps, comme expliqué par dogbane
  • Utilisez la commande getconf tel que proposé par tim qui est également disponible sur Linux:

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

9voto

Michael Aaron Safyan Points 45071

La Single UNIX Specification mentionne NAME_MAX et PATH_MAX des constantes dans les limites.h qui peut être lu avec pathconf. Cependant, ce système de fichiers est très dépendante, et vous êtes peu probable d'atteindre cette limite.

REMARQUE: en tant Que programmeur, vous ne devriez pas coder en dur 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X