В unzip появилась возможность выбора кодировки имен файлов внутри архива
В экспериментальной ветке проекта Info-Zip, в состав которого входит инструмент для распаковки архивов zip unzip, появилась возможность выбора кодировки для распаковываемого файла.
Теперь архив, созданный в операционной системе Windows и содержащий русские имена файлов, можно распаковать следующим образом:
Распакованные файлы будут иметь корректные имена вместо нечитабельного месева, появляющегося в неисправленных версиях. Ранее для обхода проблемы требовалось применять специальные ухищрения типа перекодировки имен распакованных файлов, которые зачастую не работали, или пересобирать unzip самостоятельно, накладывая сторонние патчи.
С появлением исправления в дереве основного проекта появилась надежда увидеть его в официальных базах всех дистрибутивов.
Исправленную версию UnZip 6.10c (beta) можно собрать следующим образом (в этом случае появится доступ к указанному параметру):
Как исправить кракозябры в файлах архива zip в debian 9?
Добрый день. Я ужен нашел решение на этом же форуме, использовать unar. В тот момент он сработал.
А вот сегодня скачал zip архив из виндовс. И какая-то магия получается. Попытался распаковать с помощью zip и получил
Это только название созданной папки из архива.
Попробовал через unar. Название папки нормально, а вот содержимое.
Что можете подсказать сделать? Я могу конечно пойти в виндовс, распаковать, упаковать в rar и перенести обратно в дебиан. Но очевидно, что это не решение.
На лорвики был очень подробный гайд под разные дистрибутивы
Если вас не затруднит, можете кинуть ссылку? Спасибо.
За актуальность рецепта не отвечаю, что-то могло устареть.
У меня debian 9. Пишет: add-apt-repository: command not found
Решение только для убунту.
Windows коряво пакует
Так там универсальные решения есть. Как раз на случай если в древнем дебиане, как всегда чего-то не хватает.
При ставке первой строки пишет
Проблема возникает в связи с тем, что Windows ZIP не следует спецификациям ZIP-формата, которые кстати, выложены в открытый доступ.
Если конкретно, то есть бит специальный, задающий кодировку, если он выставлен в 1, то кодировка должна быть UTF-8, а если нет, то в CP437, а в Windows не соблюдается ни то, ни другое.
Никогда не используйте встроенный в Windows архиватор. Если нужно создать архив zip в Windows, можно использовать программу 7-zip.
Что касается этой проблемы, можно попытаться переименовать после распаковки или попробовать распаковать bsdtar, 7zip или unar.
Нашел решение, хоть и костыльное, но работает. Установил winrar через wine. Все прекрасно отображается.
Первым делом буду использовать urar, если не сработает, то winrar.
Не подскажете а как закрыть на форуме вопрос?
Я тут не вижу такой опции.
В стартовом посте есть кнопка [Отметить тему решенной].
Нашел решение, хоть и костыльное, но работает. Установил winrar через wine. Все прекрасно отображается.
Можно и получше решение найти, пропатчить info-zip например. И насчёт unar, то есть опция
-e, -encoding ENCODING The encoding to use for filenames in the archive, when it is not known. If not specified, the program attempts to auto-detect the encoding used. Use «help» or «list» as the argument to give a listing of all supported encodings.
Кодировку выставить в CP866 и должно всё распаковаться без вайна.
Спасибо, в следующий раз обязательно попробую.
А зачем ждать следующего раза? Разве ты уже удалил распакованный архив? Дай вывод
Просто я тестирую другую систему, потом переметнусь обратно в xubuntu и проверю.
zip-архивы из винды: в какой кодировке там имена файлов?
Есть архив, созданный в виндах (ХР), содержаший файлы с русскими именами. Имена НЕ в uft-8/cp866/cp1251 (проверил). Так что-же там за кодировка используется? (Локаль — koi8-r)
И попутный вопрос: нужно запаковать в zip файлы с русскими именами и отдать виндузятнику. Локаль — koi8-r. Как-нибудь можно сделать так, что бы ему не пришлось потом перекодировкой заниматься?
Re: zip-архивы из винды: в какой кодировке там имена файлов?
В какой-то рассылке нашел инфу о том, что info-zip коверкает имена файлов до полной неузноваемости. Так-же нашел патч для перекодировки вот тут: https://bugzilla.altlinux.org/attachment.cgi?id=532
Только что проверил: все работатет! Виндовые архивы перекодируются на лету!
Re: zip-архивы из винды: в какой кодировке там имена файлов?
Попутный вопрос: нужно запаковать в zip файлы с русскими именами и отдать виндузятнику. Локаль — koi8-r. Как-нибудь можно сделать так, что бы ему не пришлось потом перекодировкой заниматься?
Re: zip-архивы из винды: в какой кодировке там имена файлов?
Тут на самом деле нет однозначного ответа. WinRAR и pkzip25 кодируют в cp866. Сам неоднократно гемороился с *.zip, передавая/получая файлы упакованные на машине с win2k на winxp и наоборот. imho для виндузятников лучше паковать в *.rar — там используется unicode.
Re: zip-архивы из винды: в какой кодировке там имена файлов?
> imho для виндузятников лучше паковать в *.rar — там используется unicode.
Это в новых версиях чтоль? У меня rar паковал в в кодировке локали.
Re: zip-архивы из винды: в какой кодировке там имена файлов?
>Это в новых версиях чтоль? У меня rar паковал в в кодировке локали
Я имел в виду то, что имена файлов в rar хранятся в юникоде. Пакуешь, естественно, в своей локали, а rar при паковке перекодирует имена в юникод. На распаковке — из юникода переводит в ту локаль, которая у тебя установлена.
Кодировка zip
Всем привет, знаю тема заезженная, но нечего из прочитанных рецептов не помогло. У меня после распаковки из zip архива все имена файлов что были написаны русскими буквами превращаются в кашу, а из того же архива файлы с англ. именами все в порядке. При команде file -i filename у англ. файлов charset указан iso-8859-1 а если эту команду [file -i 00_01_ਢ¥âá⢨¥.MP4] применить вот к такому файлику из архива то показывает binary. Пробовал использовать «convmv -f binary -t UTF-8 * -r —notest» но увы нечего не работает, пишет что всё ок Ready. Но все по прежднему. help плз.
ничего из прочитанных рецептов не помогло
unzip с natspec патчами точно пробовался и не помогает?
Какая связь между «file -i . — binary» и convmv -f binary .
Тут либо natspec патчи использовать, либо виндовский архиватор под вайном.
Архивирование файлов в Linux
В наши дни мы сталкиваемся с файлами архивов очень часто и на всех платформах: Windows, Mac или Linux. Это могут быть программы, резервные копии систем или баз данных или просто архив файлов. Нам также часто приходится создавать свои архивы в Linux, чтобы передать несколько файлов друзьям или загрузить на файлообменник. В виде архивов распространяются пакеты программ, исходные коды, а также много других файлов, распространяемых на просторах интернета. Научиться выполнять архивирование файлов в Linux через терминал очень важно, возможно это вам понадобиться, когда не будет доступа к графическому интерфейсу, или просто со временем в терминале станет более приятно работать.
В этой инструкции я хочу подробно рассмотреть утилиты для архивирования в Linux, мы рассмотрим не только самую популярную и универсальную утилиту — tar, но и другие менее известные, а также популярные алгоритмы сжатия.
Архивирование в Linux
Важно отметить, что архивирование в linux это не одно и то же что и сжатие файлов linux. Архивирование — это объединение нескольких небольших файлов в один, с целю более удобной последующей передачи, хранения, шифрования или сжатия. Как я уже сказал, архивация выполняется специальными утилитами. Мы не будем трогать архивацию файлов в графическом интерфейсе, вы с ними разберетесь сами, наша тема — терминал.
Самой популярной для Linux утилитой для архивации есть tar. Она используется почти везде, для архивации исходников, упаковки пакетов. Для сжатия используются другие утилиты, в зависимости от алгоритма сжатия, например, zip, bz, xz, lzma и т д. Сначала выполняется архивация, затем сжатие, отдельными программами. Автоматический запуск некоторых утилит сжатия для только что созданного архива поддерживается в tar и других подобных программах с помощью специальных опций.
Также полезной возможностью архивации есть шифрование. Но теперь давайте рассмотрим какие существуют утилиты, с помощью которых выполняется архивирование файлов linux и как ими пользоваться.
Tar — это стандартная утилита, с помощью которой выполняется архивирование файлов Linux. Постепенно из небольшой программы архивации она превратилась в мощный инструмент, поддерживающий работу со многими вариантами архивов и алгоритмами сжатия. Программа поддерживает большое количество параметров. Давайте рассмотрим ее синтаксис и основные параметры:
$ tar опции f файл_для_записи /папка_файлами_для_архива
А теперь разберем основные опции:
- A — добавить файл к архиву
- c — создать архив в linux
- d — сравнить файлы архива и распакованные файлы в файловой системе
- j — сжать архив с помощью Bzip
- z — сжать архив с помощью Gzip
- r — добавить файлы в конец архива
- t — показать содержимое архива
- u — обновить архив относительно файловой системы
- x — извлечь файлы из архива
- v — показать подробную информацию о процессе работы
- f — файл для записи архива
- -C — распаковать в указанную папку
- —strip-components — отбросить n вложенных папок
Теперь давайте рассмотрим архивирование файлов в Linux. Чтобы создать архив используйте такую команду:
tar -cvf archive.tar.gz /path/to/files
А чтобы распаковать архив tar linux:
tar -xvf archive.tar.gz
Очень просто запомнить для упаковки используется опция c — Create, а для распаковки — x — eXtract.
Сжатый архив создается точно так же, только с опцией -z, это в случае, если использовалось шифрование gizp, если нужно bzip то применяется опция -j:
tar -zcvf archive.tar.gz /path/to/files
$ tar -zxvf archive.tar.gz
Например, рассмотрим как заархивировать папку в Linux:
tar -zcvf home.tar.gz
Хотя можно поступить по-другому, тот же архив мы получим если сначала создать обычный архив с помощью tar, а потом сжать его утилитой для сжатия, только здесь мы получаем больше контроля над процессом сжатия:
Также можно убрать сжатие:
Утилиты сжатия мы рассмотрим ниже.
Чтобы добавить файл в архив используйте:
tar -rvf archive.tar file.txt
Для извлечения одного файла синтаксис тот же:
tar -xvf archive.tar file.txt
Можно извлечь несколько файлов по шаблону соответствия с помощью параметра wildcard, например, извлечем все php файлы:
tar -xvf archive.tar —wildcards ‘*.php’
По умолчанию распаковать архив tar linux можно в текущую папку с именем архива, чтобы распаковать в нужную папку используйте ключ -C:
tar -xvf archive.tar -C /path/to/dir
Стандартную утилиту рассмотрели, теперь кратко рассмотрим ее альтернативы. Их не так много, и большинство из них уже устаревшие.
Shar позволяет создавать самораспаковывающиеся архивы. По сути, это скрипт оболочки, и для распаковки ему необходима оболочка Bash или другая совместимая с Bourne Shell. У Shar есть несколько преимуществ, но также он потенциально небезопасный, так как архив представляет собой исполняемый файл.
- -o — сохранять архив в файл вместо стандартного вывода
- -l — ограничить размер выходного файла
- -L — ограничить размер выходного файла и разбить его на части
- -n — имя архива не будет включено в заголовок
- -a — разрешить автоматическую генерацию заголовков
Примеры использования shar для того чтобы заархивировать папку linux:
Создаем shar архив:
shar file_name.extension > filename.shar
Распаковываем shar архив:
ar — утилита для создания и управления архивами. В основном используется для архивации статических библиотек, но может быть использована для создания любых архивов. Раньше использовалась довольно часто но была вытеснена утилитой tar. Сейчас используется только для создания и обновления файлов статических библиотек.
- — d — удалить модули из архива
- — m — перемещение членов в архиве
- — p — напечатать специфические члены архива
- — q — быстрое добавление
- — r — добавить члена к архиву
- — s — создать индекс архива
- — a — добавить новый файл к существующему архиву
Теперь рассмотрим примеры использования. Создадим статическую библиотеку libmath.a из объектных файлов substraction.o и division.o:
ar cr libmath.a substraction.o division.o
Теперь извлечем файлы из архива:
Таким образом, можно распаковать любую статическую библиотеку.
cpio — означает Copy in and out (скопировать ввод и вывод). Это еще один стандартный архиватор для Linux. Активно используется в менеджере пакетов Red Hat, а также для создания initramfs. Архивация в Linux для обычных файлов с помощью этой программы не применяется.
- -a — сбросить время обращения к файлам после их копирования
- -A — добавить файл
- -d — создать каталоги при необходимости
Пример использования. Создаем cpio архив:
file1.o file2.o file3.o
ls | cpio -ov > /path/to/output_folder/obj.cpio
Архивирование папки linux выполняется также само.
Сжатие архивов в Linux
Как создать архив в linux рассмотрели. Теперь давайте поговорим о сжатии. Как я говорил, для сжатия используются специальные утилиты. Рассмотрим кратко несколько из них
Чаще всего применяется Gzip. Это стандартная утилита сжатия в Unix/Linux. Для декомпрессии используется gunzip или gzip -d Сначала рассмотрим ее синтаксис:
$ gzip опции файл
$ gunzip опции файл
Теперь разберем опции:
- -c — выводить архив в стандартный вывод
- -d — распаковать
- -f — принудительно распаковывать или сжимать
- -l — показать информацию об архиве
- -r — рекурсивно перебирать каталоги
- -0 — минимальный уровень сжатия
- -9 — максимальный уровень сжатия
Примеры использования вы уже видели в описании утилиты tar. Например, выполним сжатие файла:
gzip -c файл > архив.gz
А теперь распакуем:
Но чтобы сжать папку в Linux вам придется сначала заархивировать ее с помощью tar, а уже потом сжать файл архива с помощью gzip.
bzip2 — еще одна альтернативная утилита сжатия для Linux. Она более эффективная чем gzip, но работает медленнее. Для распаковки используйте утилиту bunzip2.
Описывать опции bzip2 я не буду, они аналогичны gzip. Чтобы создать архив в Linux используйте:
В текущем каталоге будет создан файл file.bz2
Новый и высокоэффективный алгоритм сжатия. Синтаксис и опции тоже похожи на Gzip. Для распаковки используйте unlzma.
Еще один высокоэффективный алгоритм сжатия. Обратно совместимый с Lzma. Параметры вызова тоже похожи на Gzip.
Кроссплатформенная утилита для создания сжатых архивов формата zip. Совместимая с Windows реализациями этого алгоритма. Zip архивы очень часто используются для обмена файлами в интернете. С помощью этой утилиты можно сжимать как файлы, так и сжать папку linux.
$ zip опции файлы
$ unzip опции архив
- -d удалить файл из архива
- -r — рекурсивно обходить каталоги
- -0 — только архивировать, без сжатия
- -9 — наилучший степень сжатия
- -F — исправить zip файл
- -e — шифровать файлы
Чтобы создать Zip архив в Linux используйте:
Как видите архивирование zip в Linux не сильно отличается от других форматов.
Выводы
Теперь вы знаете все что нужно об архивации файлов в Linux. Мы рассмотрели только консольные команды, так сказать, чтобы была понятна суть. В графическом интерфейсе все еще проще. Если остались вопросы — задавайте их в комментариях.