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

» WinRAR (часть 2)

Автор: Pasha_ZZZ
Дата сообщения: 09.09.2015 10:55
Aniskin
Непонятно, по какому критерию надо исключать file2.dat и file3.dat, и выбирать file1.dat и file4.dat, если
Цитата:
В общем случае количество файлов и вложенность может быть любой
А вообще, за исключение пути, переданного RAR, отвечает ключ -ep1, например:
Цитата:
rar a -ep1 archive.rar c:\folder
добавит все 4 файла с подкаталогами, исключит folder из путей в архиве.

Добавлено:
say24
Ну вот как-то так (cmdшник):
Цитата:
(
dir /b c:\eee*
echo c:\bbb\ttt\*.ddd
echo c:\bbb\ttt\*.dd2
)|rar a backup.rar @
Автор: say24
Дата сообщения: 09.09.2015 11:10
EugeneRoshal
На мой взгляд, есть две абсолютно разных задачи:
1) Архивация вместе с содержимым. Это когда по маске "C:\eee* попадают и каталоги с именами "C:\eee", "C:\eee2" и файлы "C:\eee234.rar", при этом:
а) "C:\eee", "C:\eee2" - архивируются со всем содержимым или с выборкой по другой маске
б) не попадают "C:\zzz\eee" и "C:\zzz\eee.rar"

2) Рекурсивный поиск. Это когда в структуре по указанному пути, ищется всё, что попадает по маске.

Добавлено:
Pasha_ZZZ
Я воспользовался твоим советом, ещё до его публикации
Однако, не всё так просто, как тебе кажется. Как минимум, C:\ - должен быть текущим каталогом, для того чтобы эта конструкция работала. А если надо выбирать из нескольких подкаталогов, то конструкция становится многоэтаэной и многовложенной. Выводить файлы списком, с указанием полного пути, dir - не умеет. Единственный вариант вывода полного пути, это включение рекурсии, но тогда - получишь список всего содержимого каталогов, попадающих в маску, и даже если стек не треснет от этого безобразия, то архивация с указанием имени каждого файла персонально (вместо имени одного каталога) - наверняка будет происходить намного дольше.
Автор: Pasha_ZZZ
Дата сообщения: 09.09.2015 11:25
say24
Ну во первых, команды CD или PUSHD+POPD никто не отменял. Во-вторых, есть FOR /D, там можете с путями делать все, что вам заблагорассудится.
И поверьте, stdin и stdout к стеку никакого отношения не имеют...
Автор: say24
Дата сообщения: 09.09.2015 11:57
Pasha_ZZZ
Конструкция с архивацией из разных путей и использванием CD, исключает архивацию в один приём: первый заход будет создавать архив, остальные - добавлять. Опять же, при приличном объёме данных и не менее приличном количестве файлов - это тормоза.
С помощью FOR может и можно как-то соорудить, но пока не придумал, я не настолько силён в сотворении батников...
Как в одну команду сложить архивацию "C:\eee*" и "D:\rr\ggg*" ?


Добавлено:
И насчёт стека... я не уверен, что это именно он, но куда же это девается перенаправленный пайпом stdout, чтобы попасть в stdin следующего процесса???
Автор: Aniskin
Дата сообщения: 09.09.2015 12:06
Pasha_ZZZ

Цитата:
Непонятно, по какому критерию надо исключать file2.dat и file3.dat, и выбирать file1.dat и file4.dat

Четкого критерия нет. Сегодня я захотел упаковать file2.dat и file3.dat, а завтра захочу file1.dat и file4.dat. Может быть можно создать текстовый файл, в котором перечислить файлы, которые нужно упаковать, и передать его в качестве параметра.
Автор: YuS_2
Дата сообщения: 09.09.2015 14:19
say24

Цитата:
Конструкция с архивацией из разных путей и использванием CD, исключает архивацию в один приём

Отчего же? Достаточно хелп почитать и станет понятно, что это не так:

Цитата:
WinRAR допускает управление из командной строки. Общий синтаксис командной строки таков:
WinRAR <команда> -<ключ1> -<ключN> <архив> <файлы…> <@файл-список…> <путь для извлечения\>


Цитата:
файл-список
Файлы-списки - это обычные текстовые файлы, содержащие имена файлов для обработки. Каждое имя файла должно быть указано на отдельной строке и начинаться с первой позиции строки. В файл-список допускается помещать комментарии, признак начала комментария - символы //. Например, для архивирования файлов *.txt из папки c:\work\doc, файлов *.bmp из папки c:\work\image и всех файлов из папки c:\work\misc можно создать backup.lst, содержащий следующие строки:
c:\work\doc\*.txt//резервная копия текстов
c:\work\image\*.bmp//резервная копия рисунков
c:\work\misc
После этого для архивирования достаточно будет выполнить команду:
winrar a backup @backup.lst
В одной командной строке разрешается указывать как обычные имена или группы файлов для обработки, так и файлы-списки. Если не указаны ни файлы, ни файлы-списки, то подразумевается шаблон *.* (т.е. WinRAR обработает все файлы).

Автор: EugeneRoshal
Дата сообщения: 09.09.2015 14:50
oshizelly

Цитата:
а просто массив байтов для восстановления основных данных архива на случай их поломки? (Вот такой вот создатель этого архива перестраховщик, выставил значение опции Recovery Record равным 100%).

Исходные тексты распаковщика я ведь выкладываю. А по ним будет видно, как распаковщик работает с такой якобы recovery record. И что данные этой RR не соответствуют тому, что должно бы быть в настоящей RR, пытливый исследователь сможет узнать, поизучав код RAR в отладчике.

yanko12

Цитата:
дополнительно нашлось только это
https://en.wikipedia.org/wiki/Rubberhose_%28file_system%29

В RAR, чтобы сделать что-то аналогичное, пришлось бы радикально менять структуру архива. И даже в этом случае факт наличия нескольких паролей можно было бы увидеть по присутствию "лишних" секторов в архиве.

say24

Цитата:
Вот и надо чтобы в архив залетело:

То есть, для поиска каталогов рекурсия должна быть выключена, а для файлов - включена? Да, такое в одной команде RAR совместить не может. Придется выполнить две команды - сначала для каталогов, потом для файлов.

Цитата:
1) Архивация вместе с содержимым. Это когда по маске "C:\eee* попадают и каталоги с именами "C:\eee", "C:\eee2" и файлы "C:\eee234.rar", при этом:
а) "C:\eee", "C:\eee2" - архивируются со всем содержимым или с выборкой по другой маске
б) не попадают "C:\zzz\eee" и "C:\zzz\eee.rar"

rar a arc c:\eee*\* c:\eee*.rar

WinRAR должен быть свежим 5.30 beta 3 English с rarlab.com.

Цитата:
Как в одну команду сложить архивацию "C:\eee*" и "D:\rr\ggg*" ?

Если обе без рекурсивного поиска или обе с рекурсивным, так и складывать, указав обе маски. Проблема возникает, только если для одной из масок нужна рекурсия, а для другой - нет. Но она в такой ситуации и для обычных масок файлов возникает, тут приходится обрабатывать рекурсивные маски в одной команде, а нерекурсивные - в другой.
Автор: Pasha_ZZZ
Дата сообщения: 09.09.2015 14:51
say24
Цитата:
Как в одну команду сложить архивацию "C:\eee*" и "D:\rr\ggg*" ?

Цитата:
(
for /d %%a in (c:\eee*) do echo %%a
for /d %%a in (d:\rr\ggg*) do echo %%a
)|rar a backup.rar @
Автор: Victor_VG
Дата сообщения: 09.09.2015 15:58
say24

Вы можете использовать механизм конвейера команд консоли ОС:

Одиночный & - выполнить следующую команду вне зависимости от успешности предыдущей;
Двойной & == && - выполнить следующую команду только если предыдущая завершилась успешно;

формат записи непрерывная строка команд. Рабочий пример с винды -

@echo off&@cd Far&hidcon-x64.exe /detach rfar.cmd %1&exit

коий сам пользую для запуска Far Manager как новой задачи в независимой сессии консоли (это если мне нужно чтобы новая копия не наследовала среду запустившей, обычно для тестов плагинов и Lua скриптов дабы если что и сбоит легче было ошибки вылавливать, хотя можно и из шелла позвать, но иной раз этот способ удобнее).

и с FreeBSD UNIX (я и на замену и по 700 - 800 пакеджей в одну команду часто ставлю с кучей проверок - bash всё правильно обработает пока я другой работой занят):

su&&pkg_replace openssl-0.9.8h_1=openssl-0.9.8i_1.tbz&&rehash&&pkgdb -aF&&cp -f $cwd/rarreg.key /usr/local/etc&&pkg_add rar-3.8.0_1.tbz&&exit&&rar&&pkg_add fusefs-ntfs-1.2531.tbz&&rehash&&exit

И символы перенаправления вывода:

> - перепишет содержимое целевого набора данных новыми;
>> - допишет новые данные в целевой набор;

так что как видите конвейер команд у винды похож ибо идею его они с UNIX слямзили.
Автор: oshizelly
Дата сообщения: 10.09.2015 08:13
EugeneRoshal 14:50 09-09-2015
Цитата:
Исходные тексты распаковщика я ведь выкладываю. А по ним будет видно, как распаковщик работает с такой якобы recovery record. И что данные этой RR не соответствуют тому, что должно бы быть в настоящей RR, пытливый исследователь сможет узнать, поизучав код RAR в отладчике.

Да, этот нюанс я упустил.
Тем не менее, от обсуждаемой фичи всё равно могла бы быть некоторая польза как от одной из линий защиты на пути доступа не столь "пытливого исследователя" к защищаемой информации. Просто нужно будет чётко оговорить в документации, что именно обеспечивает и чего не обеспечивает такой способ защиты.
Автор: ans72
Дата сообщения: 10.09.2015 14:24
LibreOffice 4.4.5, OS X 10.10.5, JRE 8 u 60 x64.
При попытке установки LanguageTool 3.0 выбрасывает сообщение об ошибке:

Цитата:

(com.sun.star.uno.RuntimeException) { { Message = "[jni_uno bridge error] UNO calling Java method writeRegistryInfo: non-UNO exception occurred: java.lang.UnsupportedClassVersionError: org/languagetool/openoffice/Main : Unsupported major.minor version 51.0\X000ajava stack trace:\X000ajava.lang.UnsupportedClassVersionError: org/languagetool/openoffice/Main : Unsupported major.minor version 51.0\X000a\X0009at java.lang.ClassLoader.defineClass1(Native Method)\X000a\X0009at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)\X000a\X0009at java.lang.ClassLoader.defineClass(ClassLoader.java:621)\X000a\X0009at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)\X000a\X0009at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)\X000a\X0009at java.net.URLClassLoader.access$000(URLClassLoader.java:58)\X000a\X0009at java.net.URLClassLoader$1.run(URLClassLoader.java:197)\X000a\X0009at java.security.AccessController.doPrivileged(Native Method)\X000a\X0009at java.net.URLClassLoader.findClass(URLClassLoader.java:190)\X000a\X0009at java.lang.ClassLoader.loadClass(ClassLoader.java:306)\X000a\X0009at java.lang.ClassLoader.loadClass(ClassLoader.java:295)\X000a\X0009at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:627)\X000a\X0009at java.lang.ClassLoader.loadClass(ClassLoader.java:247)\X000a\X0009at com.sun.star.comp.loader.RegistrationClassFinder.find(RegistrationClassFinder.java:52)\X000a\X0009at com.sun.star.comp.loader.JavaLoader.writeRegistryInfo(JavaLoader.java:380)\X000a", Context = (com.sun.star.uno.XInterface) @0 } }

Может кто-нибудь подсказать, что я делаю не так?
Автор: Pasha_ZZZ
Дата сообщения: 10.09.2015 14:41
ans72
Цитата:
Может кто-нибудь подсказать, что я делаю не так?
Кроме того, что пишете в несоответствующий топик?
Автор: Benchmark
Дата сообщения: 10.09.2015 15:57
oshizelly

Цитата:
Тем не менее, от обсуждаемой фичи всё равно могла бы быть некоторая польза как от одной из линий защиты на пути доступа не столь "пытливого исследователя"

Это как возле места ядерного взрыва поставить еще одну стену из гипсокартона.

Софт из серии password recovery доступен любому чайнику. Авторы такого софта во всех деталях изучают и формат архива, и реализацию алгоритмов шифрования и всё остальное. Их подобными вещами не обмануть.
Автор: Victor_VG
Дата сообщения: 10.09.2015 16:08
Benchmark

Да и без этого те же WinHex, Swetscape 010 Editor имеют шаблоны форматов архива и мгновенно покажут наличие дополнительной пустой записи в хидере. А ими уже начинают интересоваться школяры - у сеседа дочке 11 лет и им на уроке информатики учитель имел неосторожность показать 010 Editor - усё, дитя нонче всё пытливо побитно исследует и не одна, у них весь класс в этом соревнуется и даже казалось записные двоечники - всем интересно а как энто устроено?. А дети просто из любопытства разберут любой файл/алгоритм до косточек и расскажут всем что увидели. Так что в этой идее смысла нет. Пустая трата времени и сил.
Автор: shadowmans56
Дата сообщения: 13.09.2015 21:22
Русская beta 4:
x86 http://www.rarlab.com/rar/wrar530b4ru.exe
x64 http://www.rarlab.com/rar/winrar-x64-530b4ru.exe
Автор: Benchmark
Дата сообщения: 14.09.2015 14:34
Косметический баг в текущей бете.

Заходим в архив, выделяем файлы с клавиатуры - "звёздочкой" (Invert selection) или кнопкой Ins. В результате такое выделение мышью снять нельзя, только снова клавиатурой.
Автор: Sybiriak
Дата сообщения: 14.09.2015 20:03

Цитата:
Косметический баг в текущей бете.  
Заходим в архив, выделяем файлы с клавиатуры - "звёздочкой" (Invert selection) или кнопкой Ins. В результате такое выделение мышью снять нельзя, только снова клавиатурой.
В версии 5.21 (х64) final данный баг также имеет место.
Автор: EugeneRoshal
Дата сообщения: 14.09.2015 20:32
Benchmark, Sybiriak
Это поведение (persistent selection) задокументировано в главе "Selecting files" в справке. И оно всегда так было, со времен перехода с RAR/DOS на WinRAR, для схожести с DOS интерфейсом. Насколько оно уместно сейчас - другой вопрос, но это не баг, это старая-старая фича.
Автор: Benchmark
Дата сообщения: 14.09.2015 21:06
EugeneRoshal

Цитата:
Насколько оно уместно сейчас - другой вопрос, но это не баг, это старая-старая фича.

Тогда ясно.

Хотя если учесть, что последняя "нортонообразная" версия RAR для DOS и OS/2 вышла еще в конце 90-х, сейчас такое поведение действительно больше похоже на баг
Автор: EugeneRoshal
Дата сообщения: 14.09.2015 22:36
Benchmark
Я тоже думал на эту тему. Самое простое - переделать это с использованием стандартного Windows выделения. Но будет ли это правильным - не уверен. При выборе множества файлов может быть удобным выделение, которое не сбрасывается при прокрутке списка файлов стрелками или при случайном нажатии мыши.

Вероятно, правильнее взять какие-то элементы стандартного выделения. В частности, разрешить снимать persistent выделение по Ctrl+click, о чем вы и писали, но не сбрасывать его в прочих ситуациях. Правда не знаю, легко ли это реализовать технически. Уже, наверное, после 5.30 надо будет посмотреть.
Автор: Victor_VG
Дата сообщения: 15.09.2015 18:09
EugeneRoshal

Большая просьба помочь разобраться с нестандартной ситуацией - есть многотомные архивы RAR5 искусственно переименованные в Старую схему именования томов RAR29. Rar/UnRar/WinRAR их распаковывают корректно, а 7-Zip v15.06 Beta именно в данном частном случае падает (возникает AV в 7z.dll и затем падает вызвавший её хост-процесс). Игорь считает что в данном случае в его программе имеется ошибка и обещает её исправить:

Цитата:
Yes, it's BUG.
7-Zip works incorrectly, if the name of multi-volume RAR archive was changed from original name (name.part01.rar) to some name without digits before ".rar" extension.

I'll fix the BUG in next version.

Thanks!

и в итоге мы с Benchmark не можем прийти к общему мнению о том, а как следует поступить в такой ситуации:

1) игнорировать ошибку именования томов и продолжить распаковку если имена томов соответствуют соглашениям формата RAR29 несмотря на то, что сами архивы имеют формат RAR5 - это мнение Benchmark
2) не начинать распаковку и вывести сообщение о нарушении спецификаций формата RAR5 - это моё мнение, и я думаю что для исключения подобных ситуаций и в RAR стоит сделать такую проверку формата имён, причём для этого хватит просто проверить имя второго томя на допустимо/не допустимо и если сигнатура архива RAR5, а имя имеет вид <arcname>.r[0-9][0-9] то выводить сообщение об ошибке и не начинать распаковку. Иначе бардак с именами никогда не закончится.

Одно дело когда ситуация как у моих коллег - есть самописная система бэкапа на основе rarbsd, исходники давно утеряны, но комстрока rarbsd для упаковки читается ей из ./etc/backup.conf и они для увеличения надёжности хранения резервных копий использовали rarbsd v5.20 и формат RAR5 с хэшем BLAKE2, а после наворотили sh-скрипт на три экрана которые у них переименовывает архивы в старую схему, пакует в криптоконтейнер и скидывает их на другой континент в удалённый дата-центр для хранения. Да надёжно, ибо даже если локальная копия будет утрачена/уничтожена вероятность того что и удалённая копия окажется непригодна для восстановления данных стремится к нулю, но они вынуждены так поступать ибо любой вопрос об обновлении любого оборудования или ПО вызывает у их босса одну реакцию - "Ещё раз об этом заикнётесь уволю!".
Автор: EugeneRoshal
Дата сообщения: 15.09.2015 20:19
Victor_VG

Цитата:
1) игнорировать ошибку именования томов и продолжить распаковку если имена томов соответствуют соглашениям формата RAR29 несмотря на то, что сами архивы имеют формат RAR5 - это мнение Benchmark
2) не начинать распаковку и вывести сообщение о нарушении спецификаций формата RAR5

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

Я в RAR выбрал первый вариант, но по мне они практически равноценны.
Автор: Victor_VG
Дата сообщения: 15.09.2015 23:04
EugeneRoshal

Ясно, по мне второй конечно строже, но препятствует потенциальным ошибкам.
Автор: oshizelly
Дата сообщения: 26.09.2015 14:28
Внезапно не смог найти возможности изменить в ранее созданном профиле шаблон штампа времени создания архива (поле Backup => Generate archive name by mask).
Похоже, один из нас тупит, либо я, либо WinRar. Но кто именно?
Автор: EugeneRoshal
Дата сообщения: 26.09.2015 21:04
oshizelly
Загрузить профиль, отредактировать, сохранить под тем же именем. Имя при сохранении можно выбрать из выпадающего списка.
Автор: Sybiriak
Дата сообщения: 26.09.2015 22:17
EugeneRoshal
Столкнулся с несколько неожиданным поведением сабжа:
При архивировании с включенной опцией "Помещать каждый файл в отдельный архив" и уже существующем архиве с именем файла, создается новый архив вида "имя_файла.расширение.архив" вместо замещения/обновления файла в существующем архиве "имя_файла.архив".
Автор: Victor_VG
Дата сообщения: 27.09.2015 01:01
Sybiriak

По идее разумно ибо создаётся новая версия сушествующего архива и предотвращается потеря данных.
Автор: Ikonnikoff
Дата сообщения: 27.09.2015 18:00
EugeneRoshal

Женя, пробую установить версию 5.30 на WinXP, но установщик просто не стартует. Больше не поддерживаем оную? В списке изменений не нашёл ничего об этом.

P.S. Версия 5.21 ставится без проблем.
Автор: Victor_VG
Дата сообщения: 27.09.2015 18:21
Ikonnikoff

Может просто файл битый? Должны подходить ибо VC++2008 собирает минимум для 2000-й (это его умолчание), а ХР/2003 старше.
Автор: EugeneRoshal
Дата сообщения: 27.09.2015 18:42
Sybiriak

Цитата:
При архивировании с включенной опцией "Помещать каждый файл в отдельный архив" и уже существующем архиве с именем файла

Если file.rar уже существует, создается file.ext.rar. Основная причина такого поведения - избежать добавления file.ext1 и file.ext2 в один file.rar.

Ikonnikoff

Цитата:
Женя, пробую установить версию 5.30 на WinXP, но установщик просто не стартует. Больше не поддерживаем оную?

Поддерживается, устанавливается. В первую очередь я бы подозревал антивирус, если он есть. Были случаи, когда антивирусы без причины блокировали и установщик, и сам winrar.exe.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160

Предыдущая тема: Прога для поиска картинок в интернете.


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