una scripts script operaciones manejo eliminar ejemplos ejecutar comandos comando caracteres cadenas cadena aritmeticas linux bash file maxlength

linux - scripts - Límite de longitud de nombre de archivo en bash



operaciones aritmeticas shell script (9)

Las siguientes preguntas son solo para bash y linux:

  1. ¿Hay un límite en la cantidad de caracteres en el nombre de ruta absoluta de un archivo?
  2. ¿Existe un límite en el número de caracteres para el nombre de archivo (sin extensión) solamente?

Si es así, ¿cuáles podrían ser estos límites? ¿Cómo puedo acceder a ellos en caso de que sean específicos del sistema?


  1. ¿Hay un límite en la cantidad de caracteres en el nombre de ruta absoluta de un archivo?

Sí hay.

Ver respuesta por sfp a la pregunta Límites de longitud de nombre de archivo en Linux? en la falla del servidor

En breve:

#define PATH_MAX 4096 /* # chars in a path name including nul */

Y para:

  1. ¿Existe un límite en el número de caracteres para el nombre de archivo (sin extensión) solamente?

en la misma respuesta vinculada:

#define NAME_MAX 255 /* # chars in a file name */


Depende del sistema de archivos utilizado. Por ejemplo, ext4 tiene una longitud de nombre de archivo máxima de 256 bytes y una longitud de nombre de ruta de acceso ilimitada.

Ver Here para más.


Depende mucho del sistema de archivos. Para el ext FS (actualmente el más utilizado en Linux):

  • Longitud máxima del nombre de archivo: 255 bytes
  • longitud máxima de la ruta: ninguna

La extensión no es algo que el FS tenga en cuenta, tiene 255 bytes, incluye extensiones (puede tener nombres de archivos sin ninguna extensión).

Here hay una lista más exhaustiva de estos límites, por FS.

También puede haber extensiones en su sistema de archivos que también pueden cambiar su longitud máxima. Por ejemplo, eCryptFS que usa parte del nombre de archivo inferior para mantener los metadatos y limita el nombre del archivo a una longitud máxima de 143 caracteres. Vea la entrada del launchpad Ubuntu eCryptFS .


En 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


En un directorio temporal, ejecute:

num=1 while [ true ] do if ! touch $(printf "%${num}s" | tr '' '' ''a'') then echo $num break fi ((num++)) done

y obtengo:

touch: cannot touch `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'': File name too long 256

lo que significa que mi límite es 255.


Esto no depende de bash; depende del sistema operativo. En un mac, es 0xff para un nombre de archivo y 0x400 más o menos para un nombre de ruta. Ubuntu 9 tenía un límite de 144 caracteres para los nombres de archivo.

Encontré este enlace en Here . Indica los límites de ruta y nombre de archivo para numerosos sistemas de archivos.


FYI, en Docker, el límite del nombre de archivo es actualmente de 242 caracteres .


La especificación única de UNIX menciona las constantes NAME_MAX y PATH_MAX en limits.h que se pueden leer con pathconf . Sin embargo, esto es muy dependiente del sistema de archivos, y es poco probable que llegue a ese límite.

NOTA: Como programador, no debe codificar estos límites. Debe usar la asignación dinámica, de modo que siempre funcione siempre que el sistema subyacente permita lo que esté haciendo.


Me refiero a otras respuestas, por favor las recomendé.

En Linux, las longitudes del nombre de archivo y ruta de acceso dependen de:

Para obtener dinámicamente estas propiedades en bash :

  • Cree un nombre de archivo (o ruta de acceso) más largo y más largo según lo explicado por dogbane
  • Use el comando getconf propuesto por tim que también está disponible en Linux:

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