Ru-Board.club
← Вернуться в раздел «UNIX»

» Обработка бинарного файла в UNIX

Автор: veezex
Дата сообщения: 28.11.2009 11:05
Такой вопрос: каким образом в командной оболочке (bash) можно уменьшить размер файла на несколько байт? т.е. конкретно стоит задача отрезать от zip архива последние 2 байта.
Насколько я успел понять по изучении документации - существующие комманды unix в основном направлены на обработку текстовых файлов, и этими средствами мою проблему не решить -(

Добавлено:
конкретно это все делается чтобы делать sfx архивы Windows используя сервер на Unix,
делается это командой типа zip - testfile | cat module.sfx - > archive.exe

Проблема в том что сверху архива надо записать комментарий для sfx модуля (конкретно текст который будет отображаться в окне распаковщика) и последние 2 байта zip архива переписываются служебными байтами, после которых модуль ищет комментарий.

p.s. sfx я взял от архиватора winrar 3.80
Автор: AnDySs1
Дата сообщения: 28.11.2009 16:19

Цитата:
задача отрезать от zip архива последние 2 байта

ну вот Вам ,например, лобовое решение - узнать длину файла , уменьшить значение на 2 и скопировать заданное число байт через dd
Автор: vjunk
Дата сообщения: 29.11.2009 22:33
veezex
Может, проще взять другой SFX - от 7-Zip или от NSIS?
Автор: veezex
Дата сообщения: 30.11.2009 16:58
7-zip позволяет создавать sfx, но комментарий он может писать только в специальном sfx-модуле который предназначен для установок. этот модуль (по крайней мере как я тестил) не позволяет распаковывать зашифрованные архивы (а такие скорее всего будут)

насчет использования команды dd - в этом случае как я понимаю надо будет заново копировать архив, а архивов будет много и многие по размеру будут зашкаливать за 1гб, хотелось бы решить проблему более оптимальным способом.

nsis как вариант, только nsis скрипты можно компилировать на windows, на unix вроде этого нельзя сделать. а комментарий к архиву по сути представляет обычный текстовый файлик, который вполне можно поменять в unix.

в принципе, я сейчас попробую разобрать в структуре nsis архивов, мб решу таким образом проблему. хотя опять не факт что nsis сможет распаковать зашифрованые архивы, не для этого он создавался.

хотелось бы все таки использовать первоначальный вариант, ибо там уже все понятно и отработано. мб все таки есть способ решить проблему ?

или как вариант нужен unix архиватор позволяющий делать sfx под windows, причем с комментарием, и поддержкой запаролленных архивов.
Автор: AnDySs1
Дата сообщения: 30.11.2009 17:42

Цитата:
nsis как вариант, только nsis скрипты можно компилировать на windows, на unix вроде этого нельзя сделать

http://www.xdevsoftware.com/blog/post/How-to-Install-the-Nullsoft-Installer---NSIS-on-Linux-.aspx
Автор: veezex
Дата сообщения: 30.11.2009 17:48
спасибо за ссылку -)

но пока я не смог заставить nsis с парольными архивами работать, это возможно? если да, то все вопросы снимаются.


Добавлено:
не хотелось бы доходить до таких крайностей как переписывание кода sfx модуля 7-zip или написания утилиты по linux которая бы обрабатывала поток данных от программы zip и изменяла последние 2 байта.

надеюсь не придется изобретать очередной велосипед, и все решается проще.
Автор: vjunk
Дата сообщения: 30.11.2009 21:19
veezex
Вот тебе обрезка двух байт (без копирования):

Код: perl -e 'truncate($ARGV[0],(-s$ARGV[0])-2)' file_name
Автор: veezex
Дата сообщения: 02.12.2009 13:28
спасибо большое vjunk и AnDySs1 за помощь -)

Страницы: 1

Предыдущая тема: Установка почтового сервера на FreeBSD


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.