Po długim używaniu systemów Windows wiem, że w pewnym momencie może pojawić się okno błędu, gdy nazwy plików i folderów stają się zbyt długie.
Zdarzyło mi się to, gdy próbowałem wykonać kopię zapasową plików za pomocą SFTP z serwera do folderu w (na przykład):
D:(Windows drive partition)/Temporary/Projects/2015-06/Websites/Guitar-Site/Images/Logos/Manufacturers/Instruments/Basses/(long file name).png
Jak widać, czasami buduję bardzo określone ścieżki folderów, a jeśli nazwa pliku również jest długa, NTFS może nie być w stanie zapisać jej w ten sposób.
Obecnie martwię się o moje fizyczne kopie zapasowe, ponieważ ścieżka folderu na moim dysku kopii zapasowej doda się /backups/(drive name)/...
do wszystkich ścieżek plików.
Czy jest jakiś taki limit (lub podobny) w ext4 / Ubuntu, na który musiałbym uważać?
files
filesystem
directory
filename
Prototyp 700
źródło
źródło
Odpowiedzi:
Maksymalna długość nazwy pliku to 255 bajtów. Znaleziono na stronie wiki dla ext4 .
I maksymalna ścieżka 4096 znaków. Znalezione w tym pytaniu dotyczącym systemu Unix i Linux SE .
Chociaż znalazłem ten artykuł wiki , który nie określa maksymalnej ścieżki pliku w ext4.
źródło
jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -c 7 jtoscarson@Tylers-Ubuntu:~$ echo "123abc" | wc -m 7
-m liczy znaki, a -c liczy bajty. Powodem, dla którego jest 7 zamiast 6, jest znak końca linii, który nie jest drukowany. Łączna liczba znaków w nazwie pliku będzie więc 255.4
zaecho -n "💩" | wc -c
. Utworzenie nazwy pliku o takiej nazwie zajęłoby 4 bajty, mimo że ta nazwa pliku ma 1 wykres. „Znak” nie jest jasno zdefiniowanym pojęciem (zwykle oznacza bajt, grafem lub punkt kodowy UNICODE).len(filename.encode())
.Uważam, że najbardziej wiarygodnym sposobem na określenie tego jest
pathconf(".", _PC_PATH_MAX);
funkcja POSIX, która określa maksymalną ścieżkę dla danej ścieżki.Jak sugeruje funkcja, może się to różnić w zależności od systemu plików.
Nie znam jednak narzędzia wiersza poleceń, które je udostępnia. Oto minimalny przykład C: /programming/16285623/how-to-get-the-to-get-path-to-the-current-file-pwd-in-linux-from-c / 54155296 # 54155296
źródło
Ograniczenia nazw ścieżek zależą od używanego systemu plików. Odpowiedź jtoscarson obejmuje ext4, który jest domyślny w Ubuntu, jednak można używać różnych systemów plików w Ubuntu. Aby zacytować odpowiedź WerkkreW na temat błędu serwera , oto niektóre z systemów plików i ich ograniczenia:
Zauważ również, że różne systemy plików mają ograniczenia co do tego, jaki typ znaku może występować w nazwie pliku. Na przykład nazwy plików w
ext4
nie mogą zawierać wartości NULL i/
. Zobacz także artykuł Wikipedii na temat porównań systemów plików .Należy również pamiętać, że systemy plików Linux muszą uwzględniać definicje POSIX :
Z limitów. H :
źródło
Jak powiedział @ sergiy-kolodyazhnyy, maksymalna długość nazwy pliku zależy od systemu plików, a ogromna większość ogranicza długość pliku do 255 bajtów.
Znaczącym pominięciem w jego karcie są nośniki optyczne. Podczas gdy rozszerzenia UDF i Rock Ridge mają taki sam limit 255 znaków dla nazw plików, ISO9660 bez Rock Ridge i Joliet mają znacznie bardziej rygorystyczne ograniczenia, z którymi możesz się spotkać, jeśli robisz coś takiego jak tworzenie kopii zapasowych
youtube-dl
pobrań.Nazwy plików Joliet są ograniczone do 64 punktów kodowych UTF-16 lub 103 z nich, jeśli program do tworzenia płyt ma opcję oderwania się od specyfikacji w sposób, który wydaje się nie powodować szkód w praktyce.
Podobnie, poziomy ISO 9660 2 i 3, bez rozszerzeń Rock Ridge, są ograniczone do nazw plików 31 lub 37 znaków, jeśli grasz szybko i luźno ze specyfikacją.
ISO 9660: 1999, który jest obsługiwany przez genisoimage, ale nie przez nakładki takie jak K3b, ma limit 207 bajtów (bez Rock Ridge) lub 197 bajtów (z Rock Ridge).
(Źródło: The
genisoimage
manpage)Jeśli chodzi o maksymalną długość ścieżki , jest to duże nieporozumienie. Nie ma jednego dla większości systemów plików Linux.
Jest stałą o nazwie
PATH_MAX
, ale to tylko maksymalne dla niektórych interfejsów API POSIX , które można pracować wokół .Jedynymi wynikowymi wyjątkami od tej konwencji „bez ograniczeń długości ścieżki” są FAT32 i exFAT (32 760 znaków Unicode), NTFS i ReFS (32 767 znaków Unicode), UDF (1023 bajty) i ISO 9660 (niejasne, ale widziałem podano jako 180, 207, 212 lub 222 bajtów).
Można to łatwo wykazać, uruchamiając ten mały program w języku Python, a następnie eksplorując powstałe katalogi.
Mój
bash
, który wyświetla całą ścieżkę w monicie, będzie miał z nią kłopoty. Jednak myzsh
, który wyświetla w wierszu tylko bieżący folder, nie będzie miał problemów, a nawet mapwd
wbudowaną funkcję, która może bez problemu wyświetlać całą ścieżkę 5000+ bajtów.źródło