Menu

#405 FR | Long filenames problem

open
5
2021-11-15
2021-10-25
No

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..

Discussion

  • Igor Pavlov

    Igor Pavlov - 2021-10-25

    So some linux version doesn't support long file names?
    So how many characters in that limit there?

     
  • Anton Shevtsov

    Anton Shevtsov - 2021-10-25

    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

     
  • Igor Pavlov

    Igor Pavlov - 2021-10-25

    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.

     
  • AmigoJack

    AmigoJack - 2021-11-15

    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):

     

    Last edit: AmigoJack 2021-11-22

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.