Después de haber utilizado los sistemas Windows durante mucho tiempo, sé que en cierto punto, puede aparecer una ventana de error cuando los archivos y los nombres de las carpetas se vuelven demasiado largos.
Esto me sucedió cuando intenté hacer una copia de seguridad de archivos con SFTP desde un servidor a una carpeta en (por ejemplo):
D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png
Como puede ver, a veces tiendo a crear rutas de carpetas muy específicas y si el nombre de un archivo también es largo, NTFS podría no ser capaz de guardarlo de esta manera.
Actualmente estoy preocupado por mis copias de seguridad físicas, ya que la ruta de la carpeta en mi unidad de copia de seguridad se agregará /backups/(drive name)/...
a todas las rutas de archivos.
¿Hay algún límite (o similar) en ext4 / Ubuntu que deba tener en cuenta?
fuente
Respuestas:
La longitud máxima del nombre de archivo es 255 bytes. Encontrado en la página wiki para ext4 .
Y una ruta máxima de 4096 caracteres. Encontrado en esta pregunta de Unix y Linux SE .
Sin embargo, encontré este artículo wiki que no especifica una ruta de archivo máxima en ext4.
fuente
jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7
-m está contando caracteres y -c está contando bytes. La razón por la cual es 7 en lugar de 6 es el carácter de final de línea que no se imprime. Entonces, el total de caracteres en el nombre del archivo será 255.4
paraecho -n "💩" | wc -c
. Crear un nombre de archivo llamado con ese nombre tomaría 4 bytes a pesar del hecho de que este nombre de archivo tiene 1 grafema de largo. Un "carácter" no es un concepto claramente definido (generalmente significa byte, grafema o punto de código UNICODE).len(filename.encode())
.Creo que la forma más confiable de determinar esto es con la
pathconf(".", _PC_PATH_MAX);
función POSIX, que determina la ruta máxima para una ruta determinada.Como sugiere la función, esto puede variar entre los sistemas de archivos.
Sin embargo, no conozco una utilidad de línea de comando que la exponga. Aquí hay un ejemplo mínimo de C: /programming/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296 # 54155296
fuente
Los límites del nombre de ruta dependen del sistema de archivos en uso. La respuesta de jtoscarson cubre ext4, que es predeterminado en Ubuntu, sin embargo, puede usar una variedad de sistemas de archivos en Ubuntu. Para citar la respuesta de WerkkreW en serverfault, estos son algunos de los sistemas de archivos y sus límites:
Tenga en cuenta también que varios sistemas de archivos tienen limitaciones en cuanto a qué tipo de carácter puede estar presente en el nombre del archivo. Por ejemplo, los nombres de archivo
ext4
no pueden contener NULL y/
. Ver también, artículo de Wikipedia para comparaciones de sistemas de archivos .Tenga en cuenta también que los sistemas de archivos de Linux deben tener en cuenta las definiciones POSIX :
Desde límites.h :
fuente
Como dijo @ sergiy-kolodyazhnyy, la longitud máxima del nombre de archivo dependerá del sistema de archivos y la gran mayoría limita la longitud del nombre de archivo a 255 bytes.
Una omisión notable de su carta son los medios ópticos. Si bien las extensiones UDF y Rock Ridge tienen el mismo límite de 255 caracteres para los nombres de archivo, ISO9660 sin Rock Ridge y Joliet tienen límites mucho más estrictos con los que realmente puedes enfrentarte si haces algo como hacer una copia de seguridad de las
youtube-dl
descargas.Los nombres de archivo de Joliet están limitados a 64 puntos de código UTF-16 o 103 de ellos si su programa de masterización de disco tiene una opción para romper la especificación de maneras que parecen no causar daño en la práctica.
Del mismo modo, los niveles ISO 9660 2 y 3, sin las extensiones de Rock Ridge, están limitados a nombres de archivo de 31 caracteres o 37 si estás jugando rápido y suelto con la especificación.
ISO 9660: 1999, que es compatible con genisoimage pero no con interfaces como K3b, tiene un límite de 207 bytes (sin Rock Ridge) o 197 bytes (con Rock Ridge).
(Fuente: la página de
genisoimage
manual)En cuanto a la longitud máxima de la ruta , es un gran error. No hay uno para la mayoría de los sistemas de archivos de Linux.
Hay una constante con nombre
PATH_MAX
, pero es sólo el máximo para determinadas API POSIX , que se puede trabajar alrededor .Las únicas excepciones consecuentes a esta convención "sin límite en la longitud de ruta" son FAT32 y exFAT (32,760 caracteres Unicode), NTFS y ReFS (32,767 caracteres Unicode), UDF (1,023 bytes) e ISO 9660 (poco claro, pero he visto se indica como 180, 207, 212 o 222 bytes).
Esto se puede demostrar fácilmente ejecutando este pequeño programa Python y luego explorando los directorios resultantes.
Mi
bash
, que muestra la ruta completa en el indicador, tendrá problemas con él. Sin embargozsh
, my , que muestra solo la carpeta actual en el indicador, no tendrá problemas e incluso tiene una funciónpwd
integrada que puede mostrar la ruta completa de más de 5000 bytes sin problemas.fuente