I want to suggest a killer feature.
I am a work in any linux. Often, i get archives with long filenames (from Windows users). Something like this
```7z l /tmp/example.7z
Path = /tmp/pril/pril.7z
Type = 7z
Physical Size = 485515
Headers Size = 991
Method = LZMA2:768k
Solid = +
Blocks = 1
Date Time Attr Size Compressed Name
2020-11-27 20:29:35 D.... 0 0 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)
2020-11-27 20:29:33 ....A 62683 484524 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/1.1. Исполнение обязанностей наймодателя по договору социального найма при вселении в жилое помещение граждан, не являющихся супругом, детьми, родителями.odt
2020-11-26 18:30:54 ....A 54461 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/1.2. Исполнение обязанностей наймодателя по договору социального найма при вселении в жилое помещение граждан в качестве временных жильцов.odt
2020-11-26 18:35:46 ....A 68792 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/1.3. Исполнение обязанностей наймодателя по договору социального найма при обмене жилыми помещениями.odt
2020-11-25 12:47:15 ....A 42787 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/2.1. Предоставление водного объекта для целей, указанных в части 3 статьи 11 Водного кодекса Российской Федерации.odt
2020-11-25 12:59:55 ....A 45886 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/2.2. Предоставление водного объекта для целей, указанных в части 2 статьи 11 Водного кодекса Российской Федерации (в случаях, установленных пунктами 1 или 3 части 2 статьи 11, а также статьями 15, 47, 49 и 50 Водного ко.odt
2020-11-25 13:01:36 ....A 45200 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/2.3. Предоставление акватории водного объекта (за исключением случаев, установленных пунктами 1 или 3 части 2 статьи 11, а также статьями 15, 47, 49 и 50 Водного кодекса Российской Федерации).odt
2020-11-25 13:04:42 ....A 37146 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/3. Признание садового дома жилым домом и жилого дома садовым домом.odt
2020-11-25 13:10:41 ....A 41208 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/4.1. Проведение экспертизы проекта освоения лесов.odt
2020-11-25 13:10:07 ....A 41538 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/4.2. Проведение экспертизы изменений в проект освоения лесов.odt
2020-11-25 13:06:46 ....A 50619 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/5.1. Прием заявок о согласовании создания места (площадки) накопления твердых коммунальных отходов.odt
2020-11-25 13:06:01 ....A 45219 Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/5.2. Включение сведений о месте (площадке) накопления твердых коммунальных отходов в реестр мест (площадок) накопления твердых коммунальных отходов.odt
2020-11-27 20:29:35 535539 484524 11 files, 1 folders
```
It is impossible to extract files from such an archive in Linux (filename too long)..
Or it can be done in a very unfriendly way like this
7z e pril.7z -so 'Схемы, включенные в план либо в очередь на реализацию с корректировками (для учета данных правок на этапе тестирования)/2.2. Предоставление водного объекта для целей, указанных в части 2 статьи 11 Водного кодекса Российской Федерации (в случаях, установленных пунктами 1 или 3 части 2 статьи 11, а также статьями 15, 47, 49 и 50 Водного ко.odt' > 2.2.odt
It would be very nice if there was a switch for fix it - extract filename with renaming on-the-fly.
7z x archive.7z -o/tmp/outputfolder --truncated_long_filenames_from_hell
before name -
2.2. Предоставление водного объекта для целей, указанных в части 2 статьи 11 Водного кодекса Российской Федерации (в случаях, установленных пунктами 1 или 3 части 2 статьи 11, а также статьями 15, 47, 49 и 50 Водного ко.odt
after name -
2.2. Предоставление водного объекта_name_truncated.odt
or
2.2. Предоставление водного объекта_md5hash_truncated.odt
or something else..
So some linux version doesn't support long file names?
So how many characters in that limit there?
Any linux has this problem.
Windows filename is 255 characters, but classic linux filesystem ext2/ext3/ext4 - 255 bytes (if use UTF-8 is 127 characters)
ext2 255 bytes
ext3 255 bytes
ext4 255 bytes
BTRFS 255 bytes
exFAT 255 UTF-16 characters
FAT32 8.3 (255 UCS-2 code units with VFAT LFNs)
NTFS 255 characters
XFS 255 bytes
So the 2-bytes utf-8 encoding for russian characters is main source of that problem.
I'll think about that problem later.
The fix is not so simple.
See also https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits, second column "Maximum filename length". As per UTF-8 the maximum of 255 bytes will only allow 63 characters when using i.e. Emojis (since they need 4 bytes per character). Likewise NTFS (and FAT32) will also effectively only support up to 127 characters when using Emojis.
In other words: this filename of 64 characters should also be a problem, since it needs 256 bytes in UTF-8:
🌀🌁🌂🌃🌄🌅🌆🌇🌈🌉🌊🌋🌌🌏🌑🌓🌔🌕🍚🍛🌀🌁🌂🌃🌄🌅🌆🌇🌈🌉🌊🌋🌌🌏🌑🌓🌔🌕🍚🍛🌀🌁🌂🌃🌄🌅🌆🌇🌈🌉🌊🌋🌌🌏🌑🌓🌔🌕🍚🍛🌀🌁🌂🌃
.One way to solve/support this is to first look for a potential filename extension (search for a dot from the end), count its bytes, then reduce the remainder of the filename until its byte count plus the byte count of the extension (or zero) is below the filesystem's maximum. Follow up issues (as such multiple "same" filenames may render) are already supported with "automatically rename".
For every operating system there should be an adequate system call to not only get the filesystem name but also the maximum per component (speak: file/folder name):
For Windows it would be GetVolumeInformation(), where
lpMaximumComponentLength
would return 255 for both NTFS and FAT32, meaning UTF-16 codepoints (which means 127-255 characters).For Linux you could call pathconf() or getconf() for the MAX_NAME constant, and I guess the filename then examines the underlying filesystem.
Last edit: AmigoJack 2021-11-22