Ru-Board.club
← Вернуться в раздел «Программы»

» 7-Zip / 7z (часть 2)

Автор: VictorVG4
Дата сообщения: 21.05.2016 14:42
7-Zip 16.02 версию и ссылки в шапке поправил, p7zip (FreeBSD UNIX) пока v15.14 - значит v16.0x ещё не проверили на отсутствие ошибок.

Добавлено:
Хотя бы частично известны изменения в LZMA SDK:

16.02 2016-05-21

- The BUG in 16.00 - 16.01 was fixed: Split Handler (SplitHandler.cpp) returned incorrect total size value (kpidSize) for split archives.
Автор: KT315E
Дата сообщения: 21.05.2016 14:57

Цитата:
What's new after 7-Zip 16.01:
The BUG in 16.00 - 16.01 was fixed:
7-Zip mistakenly reported the warning
"There are some data after the end of the payload data"
for split archives.

Не пофиксили. При распаковке обновлений Windows (*.msu) и 16.02 такое предупреждение показывает.
Автор: pasynok
Дата сообщения: 21.05.2016 16:26
NsisIn.h -> #define NSIS_SCRIPT 1602 x32 x64 (пароль стандартный)
Автор: wvxwxvw
Дата сообщения: 22.05.2016 01:07
7-Zip.16.02.Ru.PulseMod
Заменил тулбар и иконки программы-архивов (если через "открыть с помощью"). Добавил справку русскую от Gora.
Иконки FM взял у YSF:

Тулбар:



7-Zip.16.02.Ru.PulseMod.7z
Автор: tma16
Дата сообщения: 22.05.2016 03:46
wvxwxvw
Лучше в .sfx такие вещи паковать, я лично уже 100 раз напарывался, и даже по своей вине, после установки оси.
Автор: wvxwxvw
Дата сообщения: 22.05.2016 11:54
tma16
На что напарывались? Для себя пакую, просто не уверен, что это другим интересно.
7-Zip.16.02.Ru.PulseMod.sfx

Добавлено:
А, понял. Когда не чем распаковать.

Тогда инструкция:
Этот sfx распаковывается и работает из %TEMP%, автовыбор разрядности и удаляет сам себя при закрытии программы. Но папку с архиватором можно забрать оттуда, когда sfx запущен. Так же можно его просто распаковать архиватором.
Автор: RIKARDOYYY
Дата сообщения: 22.05.2016 14:38
wvxwxvw
За офтоп простите. Люди избыточно перестраховуются, как мне представляется. Тем более, что сами могут, совершенно не напрягаясь, "соломку постелить" для себя же. Это если чересчур сильно не лениться

Что до интереса к PulseMod так он есть, наверное, у многих. Приятно же видеть облагороженный фейс! Эстетическое, наряду с функционалом, никогда не бывает лишним.
Раз уж заофтопил, то заодно и говорю Вам спасибо и, разумеется, Gora за справку и YSF за иконки.
Автор: Andarin
Дата сообщения: 22.05.2016 18:23

Цитата:
Что до интереса к PulseMod так он есть, наверное, у многих. Приятно же видеть облагороженный фейс! Эстетическое, наряду с функционалом, никогда не бывает лишним.
Раз уж заофтопил, то заодно и говорю Вам спасибо и, разумеется, Gora за справку и YSF за иконки.

Солидарен.
Автор: AlessTO
Дата сообщения: 25.05.2016 01:56
Натолкнулся на проблему касающуюся работы с томами, аналогичную некоторой давности просьбе (на другом форуме):

Цитата:
Хочу организовать дифференциальное архивирование данных файлового сервера с помощью 7z.
Объем данных ~180 ГБ. Пока жмется rar-ом до 26 ГБ, ежедневно (полный бэкап). Процесс длится всю ночь (около 12 часов). Архив бьется на куски (rar-ом же), еженедельно пишется на Blue-ray диски.
Есть желание сократить время архивирования (подходит все ближе к началу рабдня), плюс ввести дифф. копии.
Экспериментально определил параметры, которые позволяют жать данные до 30 ГБ за 6 часов с помощью 7z.
Вот команда для еженедельного полного бэкапа в конце недели:

Код: "C:\Program Files\7-Zip\7z.exe" a c:\backup_full.7z -mmt=on -m0=LZMA2 -ms=off -mx3 -y -ssw D:\Data

Команда для ежедневного дифференциального бэкапа:

Код: "C:\Program Files\7-Zip\7z.exe" u c:\backup_full.7z -mmt=on -m0=LZMA2 -ms=off -mx3 -y -ssw -u- -up0q3x2z0!c:\backup_diff.7z D:\Data
Автор: VictorVG4
Дата сообщения: 25.05.2016 02:41
AlessTO

Вообще-то а что мешает задать размеры тома ключом -v ?

Цитата:
-v (Create Volumes) switch
Specifies volume sizes.

Syntax
-v{Size}[b | k | m | g]


{Size}[b | k | m | g]
Specifies volume size in Bytes, Kilobytes (1 Kilobyte = 1024 bytes), Megabytes (1 Megabyte = 1024 Kilobytes) or Gigabytes (1 Gigabyte = 1024 Megabytes). if you specify only {Size}, 7-zip will treat it as bytes.
It's possible to specify several -v switches.

NOTE: Please don't use volumes (and don't copy volumes) before finishing archiving. 7-Zip can change any volume (including first volume) at the end of archiving operation.

Examples
7z a a.7z *.txt -v10k -v15k -v2m

creates multivolume a.7z archive. First volume will be 10 KB, second will be 15 KB, and all others will be 2 MB.

Commands that can be used with this switch
a (Add),

и легонько пошерудить маны?

Добавлено:
Andarin

Приятно, но по мне с консоли проще парадом командовать. Да и извилины разминает.
Автор: AlessTO
Дата сообщения: 25.05.2016 05:40
VictorVG4
Таки в каком месте шерудить маню? Если

Цитата:
бить полный архив, то потом разностный либо завершается по ошибке, либо делает полный бэкап, взависимости от указания имени (backup_full.7z.001, либо backup_full.7z). И т.п.

Скриптик
[more=вот он.]
Код: 'Ежедневное разностное резервное копирование данных при помощи 7-Zip и VBScript (28.08.2009)
'http://zheleznov.info/backup_diff.htm

'== НАСТРОЙКИ

'что копировать?
'Const SRC = """C:\Users\*""" 'каталог и маска для резервирования
'Const SRC = """%AppData%\Opera\Opera\*""" 'здесь допускаются переменные окружения
Const SRC = "@C:\files.txt" 'взять список каталогов из текстового файла

'куда копировать?
Const PREFIX = "backup" 'префикс имени архива, условное название архивируемого ресурса
Const EXT = ".7z" 'расширение архивного файла
Const HISTORY = 4 'количество полных архивов в истории

'чем упаковывать?
Function ReadAllTextFile
Const ForReading = 1, ForWriting = 2
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\run", ForReading)
ReadAllTextFile = f.ReadAll
End Function
Const PROGRAM = """%ProgramFiles%\7-Zip\7z.exe""" 'если 7-Zip установлен
'Const PROGRAM = "7z.exe" 'если архиватор лежит рядом со скриптом
Const OPTIONS = "-mhe -spf -slp -r -mx5 -x@C:\exclude.txt -v2240m" 'опции архиватора

'где отмечать?
Const REPORT = "report.txt" 'файл журнала

'не завершать скрипт аварийно
On Error Resume Next

'== ОБЩИЕ ОПРЕДЕЛЕНИЯ

'записать сообщение в журнал
Sub Log(msg)
    Const APPEND = 8 'добавить в конец файла
    Dim fso, f
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(REPORT, APPEND, True)
    f.WriteLine Now & " " & msg
    f.Close
End Sub

'объект для работы с файлами
Dim fso
Set fso = WScript.CreateObject("Scripting.FileSystemObject")

Dim full 'имя последнего полного архива

'== СОЗДАНИЕ АРХИВА

'выбрать способ архивации
Dim arg, cmd
cmd = "" 'команда архиватора
Set arg = WScript.Arguments
If arg.Count > 0 Then
    If arg.Item(0) = "diff" Then
        cmd = "u"
    ElseIf arg.Item(0) = "full" Then
        cmd = "a"
    Else
        cmd = ""
    End If
End If

'полный архив
If cmd = "a" Then
    'имя нового архива
    full = PREFIX & "-" & FormatDateTime(Date, vbShortDate) & "-full" & EXT
    'если сегодня архив уже делали - не продолжать
    If (fso.FileExists(full)) Then
        Log full & ": создан РАНЕЕ и не будет перезаписан"
        WScript.Quit
    End If
    'опции командной строки
    opt = OPTIONS

'разностный архив
ElseIf cmd = "u" Then
    'найти полный архив
    Dim dir, fc, f, last
    Set dir = fso.GetFolder(".") 'рабочий каталог
    Set fc = dir.Files 'коллекция файлов
    full = ""
    last = 0 'дата последнего полного архива
    For Each f In fc
        If Left(f.name, Len(PREFIX & "-")) = PREFIX & "-" _
        And Right(f.name, Len("-full" & EXT)) = "-full" & EXT _
        And f.DateLastModified > last Then
            full = f.name
            last = f.DateLastModified
        End If
    Next
    'без полного архива не продолжать
    If Len(full) = 0 Then
        Log "ОШИБКА! Полный архив НЕ НАЙДЕН, разностный архив не может быть создан"
        WScript.Quit
    End If
    'имя нового архива
    diff = Left(full, Len(full) - Len("full" & EXT)) & FormatDateTime(Date, vbShortDate) & EXT
    'если сегодня архив уже делали - не продолжать
    If (fso.FileExists(diff)) Then
        Log diff & ": создан РАНЕЕ и не будет перезаписан"
        WScript.Quit
    End If
    'опции командной строки
    opt = OPTIONS & " -u- -up0q3x2z0!" & diff

'справка
Else
    WScript.Echo "Ежедневное разностное резервное копирование:" & vbCrLf _
    & SRC & vbCrLf _
    & vbCrLf _
    & "Отчет в файле:" & vbCrLf _
    & REPORT & vbCrLf _
    & vbCrLf _
    & "Опции командной строки:" & vbCrLf _
    & "full - создание полного архива" & vbCrLf _
    & "diff - создание разностного архива"
    WScript.Quit
End If

'если нет файла со списком исключений exclude.txt - создать
'файл указан в опциях архиватора и поэтому должен существовать, хотя бы пустой
If Not fso.FileExists("C:\exclude.txt") Then
    Dim tf
    Set tf = fso.CreateTextFile("C:\exclude.txt")
    tf.Close
End If

'создать архив
Dim sho, ret
Set sho = WScript.CreateObject("WSCript.Shell")
ret = sho.Run(PROGRAM & " " & cmd & " " & full & " " & "-p" & ReadAllTextFile & " " & opt & " " & SRC, 7, True) '7 = в свернутом виде

'результат
Dim msg
Select Case ret
Case 0
    msg = "Ok"
Case 1
    msg = "Некоторые файлы были ЗАНЯТЫ и поэтому не добавлены в архив"
Case 2
    msg = "ОШИБКА при создании архива"
Case 7
    msg = "ОШИБКА в командной строке"
Case 8
    msg = "ОШИБКА - недостаточно памяти"
Case 255
    msg = "ОШИБКА - создание архива было ПРЕРВАНО пользователем"
Case Else
    msg = "ОШИБКА при создании архива, код " & ret
End Select
If cmd = "a" Then
    Log full & ": " & msg
Else
    Log diff & ": " & msg
End If

'== УДАЛЕНИЕ УСТАРЕВШИХ АРХИВОВ

'составить массивы имен и дат имеющихся ПОЛНЫХ архивов
'дата берется из файловой системы, а не из имени файла :(
Dim i, names(), dates()
ReDim names(0)
ReDim dates(0)
Set dir = fso.GetFolder(".") 'рабочий каталог
Set fc = dir.Files 'коллекция файлов
i = 0
For Each f in fc
    If Left(f.name, Len(PREFIX & "-")) = PREFIX & "-" _
    And Right(f.name, Len("-full" & EXT)) = "-full" & EXT Then
        ReDim Preserve names(i + 1)
        ReDim Preserve dates(i + 1)
        names(i) = f.name
        dates(i) = f.DateLastModified
        i = i + 1
    End If
Next

'отобрать последние ПОЛНЫЕ архивы
Dim j, dmax, imax
For j = 1 To HISTORY
    dmax = 0
    For i = 0 To UBound(dates)
        If dates(i) > dmax Then
            dmax = dates(i)
            imax = i
        End If
    Next
    dates(imax) = 0
    names(imax) = ""
Next

'удалить устаревшие ПОЛНЫЕ архивы и соответствующие разностные
Dim pref
For i = 0 To UBound(names)
    If Len(names(i)) > 0 Then
        Log names(i) & ": устарел, должен быть УДАЛЕН"
        fso.DeleteFile names(i), False 'файлы с атрибутом ReadOnly не удаляются!
        'соответствующие разностные
        pref = Left(names(i), Len(names(i)) - Len("full" & EXT))
        For Each f in fc
            If Left(f.name, Len(pref)) = pref _
            And Right(f.name, Len(EXT)) = EXT Then
                Log f.name & ": устарел, должен быть УДАЛЕН"
                fso.DeleteFile f.name, False 'файлы с атрибутом ReadOnly не удаляются!
            End If
        Next
    End If
Next
Автор: VictorVG4
Дата сообщения: 25.05.2016 12:51
AlessTO

Справку 7-Zip читайте. Выписка из неё. В ситуации когда операция резервирования не закончена любой алгоритм выдаст непредсказуемые результаты, в т.ч. и tar -fM --record-size=NUMBER TARBALL SOURCE хотя tar с момента своего рождения в UNIX System 7 (январь 1979) умеет создавать многотомные архивы.
Автор: mig73
Дата сообщения: 25.05.2016 13:55
VictorVG4
Мне вот очень интересно что вносится в код 7z.dll для отображения вида [NSIS].nsi в инсталяторе? Не ломает ли это код, ну в смысле не ухудшает ли это архиватор.
Автор: AlessTO
Дата сообщения: 25.05.2016 14:00
VictorVG4
в общем-то не ожидал адекватного вопросу ответа (и уже не жду).
спасибо за внимание
Автор: VictorVG4
Дата сообщения: 25.05.2016 14:08
mig73

Нет, не влияет.

Игорь сейчас это закомментировал т.к. полностью восстановить исходный код макроязыков (таких как макро ассемблеры, NSIS, IBM PL/1, ...) после компиляции невозможно - сначала препроцессор раскрывает макросы и подключаемые внешние исходники (инклюды) в исходный текст времени компиляции, а после компилятор (точнее транслятор) формирует исполняемый код. А у NSIS препроцессор после выполнения условной компиляции осуществляет вычисления адресов переходов которые вставляет в промежуточный исходник. Так что восстановить исходный вид NSIS программы если это не линейная программа без команд условной компиляции, макросов и инклюдов невозможно. Причины см. выше.
Автор: GORA2
Дата сообщения: 25.05.2016 14:53
mig73

Цитата:
Не ломает ли это код, ну в смысле не ухудшает ли это архиватор.


Ухудшает! По крайней мере так считает сам автор архиватора. Именно по этой причине он отключил генерацию NSIS скрипта. Доводы его вполне понятны, хотя не все с ним согласны.

Еще пару слов к тем, кто постоянно просит скомпилировать dll последней версии с поддержкой NSIS скрипта.
Хотя включить поддержку назад с помощью изменения одной строки в исходниках и не сложно, но вы должны осознавать, что кусок генерации NSIS скрипта очень большой и сложный. Этот кусок автором более не обновляется и не модифицируется, ибо он ему не нужен и в стандартном архиваторе его нет.
Нет гарантии, что в один прекрасный момент этот "постоянно устаревающий" кусок кода, ответственный за генерацию NSIS скрипта, не "конфликтнет" с основным кодом архиватора со всеми вытекающими последствиями.
Автор: pasynok
Дата сообщения: 25.05.2016 19:52
mig73
Цитата:
Мне вот очень интересно что вносится в код 7z.dll для отображения вида [NSIS].nsi в инсталяторе?
Раскоментирована строка № 19 в файле NsisIn.h. Других изменений не делалось.
Цитата:
Не ломает ли это код, ну в смысле не ухудшает ли это архиватор.
Версия 1505 от 14.06.2015 собрана автором в включенной поддержкой [NSIS].nsi. Никаких проблем, связанных с включением [NSIS].nsi пока выявлено и доказано не было. Так что все разговоры об обратном - лишь область предположений. И если вам нужно хоть как-то смотреть [NSIS].nsi, то другой альтернативы я не знаю. Но... Лучшее враг хорошего. И если у вас нет необходимости просматривать [NSIS].nsi, то и нет никакого смысла использовать версию с включенным их отображением.
А вот что пишет автор по этому поводу:
Цитата:
That code for [NSIS].nsi extracting is bloated and 99% users probably don't need it. So I have disabled that feature. So the code now is smaller and more safe (note that some critical security bugs in such bloated code are possible).
Вольный перевод:
Цитата:
Код для извлечения [NSIS].nsi раздут и 99 процентов пользователей, вероятно, не нуждаются в нем. Так что я отключил эту опцию. Таким образом, код теперь стал меньше и безопаснее (обращаю внимание, что в таком раздутом коде возможны критические уязвимости безопасности).
Так что... "думайте сами, решайте сами"...
Автор: dev2null
Дата сообщения: 25.05.2016 21:22
pasynok 19:52 25-05-2016
Цитата:
И если вам нужно хоть как-то смотреть [NSIS].nsi, то другой альтернативы я не знаю.

Observer еще умеет [NSIS].nsi, но там так: http://s1.bild.me/bilder/240416/12619232016-05-25_211319.png
Автор: VictorVG4
Дата сообщения: 25.05.2016 21:35
dev2null

С Observer ситуация такая - NSIS 2.x - полная поддержка, NSIS 3.x - в работе. На скрине файл NSIS 3.x. Observer его понимает, но с распаковкой будут сложности т.к. там формат контейнера изменился.
Автор: Dunkeshu
Дата сообщения: 26.05.2016 15:04
Иными словами, чтобы избежать подобное недоразумение:
Цитата:
С Observer ситуация такая - NSIS 2.x - полная поддержка, NSIS 3.x - в работе. На скрине файл NSIS 3.x. Observer его понимает, но с распаковкой будут сложности т.к. там формат контейнера изменился.
можно вернуться к истокам, то есть использовать версию NSIS старше 2.0. В данном случае, это не позволит распаковать и соответственно, что-либо посмотреть с помощью 7z и Observer. Другими словами, автор 7z абсолютно прав, когда исключил явную "поддержку" NSIS, так как "гоняться" за "распаковщиками NSIS" не его предназначение.
Автор: pasynok
Дата сообщения: 26.05.2016 15:28
Dunkeshu
Цитата:
это не позволит распаковать и соответственно, что-либо посмотреть с помощью 7z и Observer
7z вполне успешно справляется с файлами, созданными 3-й версией NSIS.

Цитата:
Другими словами, автор 7z абсолютно прав
Автор прав априори, ибо он делает то, что считает нужным и это его право. Другое дело, что нам может нравится или не нравится то или иное его решение, и это наше право. Здесь все зависит от наших ожиданий в отношении софта. Мне, например, очень жаль, что автор принял такое решение в отношении NSIS.
Автор: xChe
Дата сообщения: 26.05.2016 15:38
Dunkeshu
Цитата:
использовать версию NSIS старше 2.0. В данном случае, это не позволит распаковать и соответственно, что-либо посмотреть

Честным людям нечего скрывать в своём [NSIS].nsi
Автор: VictorVG4
Дата сообщения: 26.05.2016 16:00
Dunkeshu

Распаковать можно, просто возни добавится.
Автор: Dunkeshu
Дата сообщения: 26.05.2016 23:25
pasynok
Цитата:
Мне, например, очень жаль, что автор принял такое решение в отношении NSIS.
Мне, например, не нужен файл сценария NSIS, а распаковка файлов инсталлируемой программы, как уже было указано, поддерживается 7z из коробки, кроме (повторюсь): - не поддерживается распаковка NSIS, до v2.0.
VictorVG4
Цитата:
Распаковать можно, просто возни добавится.
На данном этапе не c помощью 7z.
Автор: mig73
Дата сообщения: 26.05.2016 23:43
VictorVG4
GORA2
pasynok
Ребята спасибо вам за столь развернутый ответ на вопрос. Просто смутило то, что размеры 7z.dll кардинально отличаются. Вот оригинал 1569 Kb и патченный по ссылке из этой темы 1476 Kb. В Total7zip для TC все же заменил dll, поскольку сам не знаю зачем мне нужен этот [NSIS].nsi (предпочитаю INNO) но хочется чтоб было
Автор: pasynok
Дата сообщения: 27.05.2016 00:06
mig73
Цитата:
смутило то, что размеры 7z.dll кардинально отличаются
Возможно, потому что собирались разными инструментами. У меня не было возможности проверить х64 версию, но судя по тому, что скачало более 100 человек и о каких-либо проблемах никто не сообщал, полагаю, что все в порядке
Dunkeshu
Возможно вы "оговорились" в своем сообщении
Цитата:
можно вернуться к истокам, то есть использовать версию NSIS старше 2.0. В данном случае, это не позволит распаковать
видимо, вы имели ввиду версию младше, поэтому я вас и не понял.
Автор: VictorVG4
Дата сообщения: 27.05.2016 00:18
mig73

Пример тот же FarNetBox - я собрал в VC++ 2010 (3305К), а меньше чем собранный в VC++2015 (3508К).
Автор: Dunkeshu
Дата сообщения: 27.05.2016 00:30
pasynok
Цитата:
видимо, вы имели ввиду версию младше, поэтому я вас и не понял.
NSIS v3.0 не может быть старше NSIS v2.0
Автор: VictorVG4
Дата сообщения: 27.05.2016 02:23
Dunkeshu

А вы уверены? Почему у меня берёт?

Добавлено:
И насчёт распаковки - nsis-3.0rc1-setup.exe :

7zFM v16.02 x64



Far v3.0 b4693 SVN r14210 x64 / ArcLite v3.0.238 x64 + 7z.dll v16.02 x64 (исходники ArcLite пока не обновлены, обновление DLL/SFX при компиляции DLL плагина)



Far v3.0 b4693 SVN r14210 x64 / Observer v1.11.2 x64



7-Zip / ArcLite вопросов с корневыми каталогами нет, Observer - с ними при русской локали не распакует, но если войти в эти каталоги вопросов нет.

P.S.

Total Commander не использую, но учитывая ответ Гислера о том, что его устраивает единая кодовая база ядра для Win16/Win32 редакций TC удивляться проблемам и ошибками при подключении UNICODE плагинов Far 2.0/3.0 к TC не приходится.
Автор: Dunkeshu
Дата сообщения: 27.05.2016 04:22
VictorVG4
Цитата:
А вы уверены? Почему у меня берёт?
Это Вы о чём? Вероятно Вы тоже не увидели это:
Цитата:
а распаковка файлов, инсталлируемой программы, как уже было указано, поддерживается 7z из коробки, кроме (повторюсь): - не поддерживается распаковка NSIS, до v2.0.
Или не определились, что есть старое, а что - новое? Это же очевидно.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135

Предыдущая тема: RDM+, TSMobiles и VNC+


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