Ograniczenie długości nazwy pliku w bash

Poniższe pytania dotyczą tylko Basha i Linuksa:

  1. Czy istnieje ograniczenie liczby znaków w bezwzględnej nazwie ścieżki pliku?
  2. Czy istnieje ograniczenie liczby znaków Tylko dla nazwy pliku (bez rozszerzenia)?

Jeśli tak, to jakie mogą być te ograniczenia? Jak Mogę uzyskać do nich dostęp, jeśli są specyficzne dla systemu?

Author: Sriram, 2011-07-04

9 answers

To bardzo zależy od systemu plików. Dla ext FS (obecnie najczęściej używany w Linuksie):

  • Maksymalna długość nazwy pliku: 255 bajtów
  • Maksymalna długość ścieżki: brak

Rozszerzenie nie jest czymś, o czym FS wie, to 255 bajtów, rozszerzenie wliczone w cenę (możesz mieć nazwy plików bez żadnych rozszerzeń).

Tutaj jest bardziej wyczerpująca lista tych limitów, na FS.

Mogą być również rozszerzenia do Twojego systemu plików, które mogą zmienić twoje maksimum Długość również. Na przykład, eCryptFS, który używa części dolnej nazwy pliku do przechowywania metadanych i ogranicza nazwę pliku do maksymalnej długości 143 znaków. Zobacz wpis Ubuntu eCryptFS launchpad .

 56
Author: e-satis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-14 16:53:14

W katalogu tymczasowym Uruchom:

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

I dostaję:

touch: cannot touch `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa': File name too long
256
Co oznacza, że mój limit to 255.
 34
Author: dogbane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-04 12:45:06

Na 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
Author: tim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-05 12:36:14

odnoszę się do innych odpowiedzi, proszę o ich upvote.

W Linuksie długość nazwy pliku i ścieżki zależy od:

Aby dynamicznie uzyskać te właściwości w bash :

  • Utwórz nazwę pliku (lub ścieżkę) dłużej i dłużej, jak wyjaśniono przez dogbane
  • Użyj polecenia getconf zaproponowanego przez tim , które jest również dostępne na Linuksie:

    $ getconf NAME_MAX /mnt/sda2/
    255
    $ getconf PATH_MAX /mnt/sda3/
    4096
    
 10
Author: olibre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:38

Pojedyncza Specyfikacja Uniksa wymienia NAME_MAX i PATH_MAX stałe w granicach .h, które można odczytać za pomocą pathconf . Jest to jednak bardzo zależne od systemu plików i jest mało prawdopodobne, aby osiągnąć taki limit.

Uwaga: jako programista nie powinieneś kodować tych ograniczeń na twardo. Powinieneś użyć alokacji dynamicznej, aby zawsze działała tak długo, jak system bazowy pozwala na cokolwiek robisz.

 7
Author: Michael Aaron Safyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-04 12:35:11
  1. czy istnieje ograniczenie liczby znaków w bezwzględnej nazwie ścieżki pliku?
Tak, jest.

Zobacz odpowiedź sfpna pytanie limity długości nazw plików w Linuksie? na serwerze błąd

W skrócie:

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

I dla:

  1. czy istnieje ograniczenie liczby znaków Tylko dla nazwy pliku (bez rozszerzenia)?

W tej samej linkowanej odpowiedzi:

#define NAME_MAX         255    /* # chars in a file name */
 3
Author: David Balažic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-13 12:13:47

To zależy od używanego systemu plików. Na przykład, ext4 ma maksymalną długość nazwy pliku 256 bajtów i nieograniczoną długość ścieżki.

Zobacz porównanie systemów plików Aby uzyskać więcej informacji.

 2
Author: Eugene Yarmash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-04 12:31:56

To nie jest zależne od basha; jest zależne od systemu operacyjnego. Na komputerze mac jego 0xff dla nazwy pliku i 0x400 lub tak dla nazwy ścieżki. Ubuntu 9 miało limit 144 znaków dla nazw plików.

Znalazłem ten link w Wikipedii . Określa limity ścieżek i nazw plików dla wielu systemów plików.

 2
Author: ncmathsadist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-04 13:39:44

Dla twojej informacji, w Dockerze limit nazw plików wynosi obecnie 242 znaki .

 0
Author: jp.rider63,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-16 17:08:55