Что за опции -{O|I} CHARSET у программы unzip?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

MiK13
Сообщения: 1288
ОС: Linux Debian

Что за опции -{O|I} CHARSET у программы unzip?

Сообщение MiK13 »

Так как с ZIP-архивами редко имею дело, что увидел эти опции только сейчас. И не на своём компьютере.
Всегда у меня была проблема распаковки созданных в винде ZIP архивов, если в именах файлов были русские буквы.
Непонятно какая использовалась кодировка. Приходилось после распаковки переименовывать. Одно время даже использовал виндовую pkzip.txt.
И вот сегодня, работая на компьютере, на котором стоит Ubuntu (какая -- не знаю) при запуске unzip обнаружил в выводе две неизвестные опции

Shell

$ unzip
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
Default action is to extract files in list, except those in xlist, to exdir;
file[.zip] may be a wildcard. -Z => ZipInfo mode ("unzip -Z" for usage).

-p extract files to pipe, no messages -l list files (short format)
-f freshen existing files, create none -t test compressed archive data
-u update files, create if necessary -z display archive comment only
-v list verbosely/show version info -T timestamp archive to latest
-x exclude files that follow (in xlist) -d extract files into exdir
modifiers:
-n never overwrite existing files -q quiet mode (-qq => quieter)
-o overwrite files WITHOUT prompting -a auto-convert any text files
-j junk paths (do not make directories) -aa treat ALL files as text
-U use escapes for all non-ASCII Unicode -UU ignore any Unicode fields
-C match filenames case-insensitively -L make (some) names lowercase
-X restore UID/GID info -V retain VMS version numbers
-K keep setuid/setgid/tacky permissions -M pipe through "more" pager
-O CHARSET specify a character encoding for DOS, Windows and OS/2 archives
-I CHARSET specify a character encoding for UNIX and other archives

See "unzip -hh" or unzip.txt for more help. Examples:
unzip data1 -x joe => extract all files except joe from zipfile data1.zip
unzip -p foo | more => send contents of foo.zip via pipe into program more
unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer
А именно -O CHARSET и -ICHARSET
И обнаружил, что эта программа нормально распаковывает виндовые ZIP-архивы с файлами с русскими именами.
Затем обнаружил, что и unzip из CentOS также нормально распаковывает такие архивы.
Но вот "родной" из Debinan почему-то это делает плохо.

И основной вопрос: для чего и как можно использовать эти дополнительные опции?
В man unzip ни в Ubuntu, ни в CentOS я упоминания о них не увидел.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21402
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Что за опции -{O|I} CHARSET у программы unzip?

Сообщение Bizdelnick »

Идёте на https://packages.ubuntu.com/. Находите пакет unzip. Качаете соответствующий ему архив *.debian.tar.*. Находите в нём файл patches/20-unzip60-alt-iconv-utf8.patch, изучаете.
Идёте на https://packages.debian.org/, повторяете. Делаете выводы.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MiK13
Сообщения: 1288
ОС: Linux Debian

Re: Что за опции -{O|I} CHARSET у программы unzip?

Сообщение MiK13 »

Bizdelnick писал:
27.01.2022 19:34
Идёте на https://packages.ubuntu.com/. Находите пакет unzip. Качаете соответствующий ему архив *.debian.tar.*. Находите в нём файл patches/20-unzip60-alt-iconv-utf8.patch, изучаете.
Спасибо. Как-нибудь поизучаю.
Но так как unzip из Ubuntu работает нормально, то особой надобности в этом нет.
К тому же узнал, что есть программа unar, которая нормально распаковывает архивы с файлами с русскими именами.
А что касается виндовых ZIP архивов, то нашёл, что надо имена сначала перекодировать из 1252 в 850, а те, что получатся из 866.
Даже скрипт нашёл
find . -type f -exec sh -c 'np=`echo {}|iconv -f cp1252 -t cp850| iconv -f cp866`; mv "{}" "$np"' \;

Вот только с программой zip есть проблемы. Она требует libc6 версии GLIBC_2.33 или GLIBC_2.33, а в Debian только 2.31
Но для меня это не актуально
Спасибо сказали: