Re: Получение информации о файлах в rar архиве

2010-02-15 Пенетрантность Alexey Pechnikov
Hello!

On Monday 15 February 2010 21:35:27 Yuriy Kaminskiy wrote:
> К тому же 7z
> 1) более нормально поддерживает кодировки имён файлов в zip (его можно убедить
> их не трогать, в результате чего они поддаются автодетекту кодировки),
> 2) и держит чёртову уймищу более других архивов (из существенного - iso-9660,
> chm, msi, ole compound document).

Присылайте фильтры документов, добавлю. У меня была задача индексации архивов
библиотек, а там только rar и zip, так что касаемо других форматов ничего 
сказать 
не могу, может, и проще их через 7z поддерживать.

Best regards, Alexey Pechnikov.
http://pechnikov.tel/


Re: Получение информации о файлах в rar архиве

2010-02-15 Пенетрантность Alexey Pechnikov
Hello!

On Monday 15 February 2010 19:39:01 Serhiy Storchaka wrote:
> Alexey Pechnikov wrote:
> > On Monday 15 February 2010 17:35:47 Maxim Nikulin wrote:
> >> Алексей, а в чем проблемы с p7zip-rar? формат вывода вроде тот же, что и
> >> у 7z.
> > 
> > Тогда для обработки rar-архивов придется ставить 7zfull, и ладно бы еще он
> > свободный был. rar при желании можно и свободный поставить, если обработка
> > кириллицы в архивах и формата новых версий некритична.
> 
> С каких пор LGPL перестала быть свободной?

$ aptitude show p7zip-rar
Раздел: non-free/utils


Best regards, Alexey Pechnikov.
http://pechnikov.tel/


Re: Получение информации о файлах в rar архиве

2010-02-15 Пенетрантность Serhiy Storchaka
Alexey Pechnikov wrote:
> On Monday 15 February 2010 17:35:47 Maxim Nikulin wrote:
>> Алексей, а в чем проблемы с p7zip-rar? формат вывода вроде тот же, что и
>> у 7z.
> 
> Тогда для обработки rar-архивов придется ставить 7zfull, и ладно бы еще он
> свободный был. rar при желании можно и свободный поставить, если обработка
> кириллицы в архивах и формата новых версий некритична.

С каких пор LGPL перестала быть свободной?


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hlbtcc$ei...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-15 Пенетрантность Serhiy Storchaka
Alexey Pechnikov wrote:
> Откуда настойчивое желание вручную всем утилитам разделитель указывать?
> По умолчанию таб, пусть таковым и остается, зачем менять-то?

OFS по умолчанию пробел, зачем менять-то?

Откуда у человека, путающегося с пробелами и табуляциями в редакторе,
желание использовать эту самую табуляцию как разделитель?


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hlbt4a$ei...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-15 Пенетрантность Alexey Pechnikov
Hello!

On Monday 15 February 2010 17:35:47 Maxim Nikulin wrote:
> Алексей, а в чем проблемы с p7zip-rar? формат вывода вроде тот же, что и 
> у 7z.

Тогда для обработки rar-архивов придется ставить 7zfull, и ладно бы еще он
свободный был. rar при желании можно и свободный поставить, если обработка
кириллицы в архивах и формата новых версий некритична.

Best regards, Alexey Pechnikov.
http://pechnikov.tel/


Re: Получение информации о файлах в rar архиве

2010-02-15 Пенетрантность Alexey Pechnikov
Hello!

On Monday 15 February 2010 19:11:27 Serhiy Storchaka wrote:
> > Имя файла - последнее в строке. Так что задача получения имени файла
> > идентична cut -f$N- возвращает "конец строки, включая поле $N"
> 
> cut -d ' ' -f$N- не сложнее.
> 

Откуда настойчивое желание вручную всем утилитам разделитель указывать?
По умолчанию таб, пусть таковым и остается, зачем менять-то?

Best regards, Alexey Pechnikov.
http://pechnikov.tel/


Re: Получение информации о файлах в rar архиве

2010-02-15 Пенетрантность Serhiy Storchaka
Alexey Pechnikov wrote:
> Имя файла - последнее в строке. Так что задача получения имени файла
> идентична cut -f$N- возвращает "конец строки, включая поле $N"

cut -d ' ' -f$N- не сложнее.


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hlbroq$b5...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-15 Пенетрантность Maxim Nikulin

Alexey Pechnikov wrote:


Интересует размер файла, дата добавления в архив или дата последней 
модификации, имя файла в архиве. Для zip,7z, etc. все легко и просто -

вывели список файлов в архве, грепнули, позвали awk и готово. Но вот
rar архив отличился - имя файла выдает _первым_ аргументом, а не 
последним! Спрашивается, что с этим финтом делать.


Алексей, а в чем проблемы с p7zip-rar? формат вывода вроде тот же, что и 
у 7z.


--
Максим Никулин


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/4b795bc3.3010...@gmail.com



Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Alexey Pechnikov
Hello!

On Sunday 14 February 2010 22:34:20 Serhiy Storchaka wrote:
> >> Если уж так
> >> хочется использовать табуляцию, то OFS="\t" (или конкатенация вместо
> >> запятой). Но причин предпочесть табуляцию пробелу нет (не забываем, что
> >> табуляция тоже может встретится в имени).
> > 
> > В имени _файла в архиве_? Сомневаюсь.
> 
> Запросто. Даже "\n" схарчит, но тут уж ничего не поделаешь, неоднозначность
> не разрешить.

Имя файла - последнее в строке. Так что задача получения имени файла идентична
cut -f$N- возвращает "конец строки, включая поле $N"

Best regards, Alexey Pechnikov.
http://pechnikov.tel/


Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Serhiy Storchaka
Alexey Pechnikov wrote:
> On Sunday 14 February 2010 21:36:55 Serhiy Storchaka wrote:
>> Лишнее, потому что на самом деле разделитель получается " \t ".
> 
> Это только если запятые ставить.

Вот именно.

>> Если уж так
>> хочется использовать табуляцию, то OFS="\t" (или конкатенация вместо
>> запятой). Но причин предпочесть табуляцию пробелу нет (не забываем, что
>> табуляция тоже может встретится в имени).
> 
> В имени _файла в архиве_? Сомневаюсь.

Запросто. Даже "\n" схарчит, но тут уж ничего не поделаешь, неоднозначность
не разрешить.


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hl9iih$1c...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Alexey Pechnikov
Hello!

On Sunday 14 February 2010 21:36:55 Serhiy Storchaka wrote:
> Лишнее, потому что на самом деле разделитель получается " \t ". 

Это только если запятые ставить.

> Если уж так
> хочется использовать табуляцию, то OFS="\t" (или конкатенация вместо
> запятой). Но причин предпочесть табуляцию пробелу нет (не забываем, что
> табуляция тоже может встретится в имени).

В имени _файла в архиве_? Сомневаюсь.

Best regards, Alexey Pechnikov.
http://pechnikov.tel/


Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Serhiy Storchaka
Alexey Pechnikov wrote:
> On Sunday 14 February 2010 20:18:18 Serhiy Storchaka wrote:
>> Можно и так (только "\t" лишние).
> 
> \t не лишние, поскольку результат еще надо потом разобрать на поля и в
> базу сложить. Я там на всякий случай зарезервировал 4 поля на усмотрение
> пользователя, ежели кому захочется дополнительную информацию собирать.
> А уж распарсить строку с фиксированным числом полей, разделенных табом,
> далее уже элементарно.

Лишнее, потому что на самом деле разделитель получается " \t ". Если уж так
хочется использовать табуляцию, то OFS="\t" (или конкатенация вместо
запятой). Но причин предпочесть табуляцию пробелу нет (не забываем, что
табуляция тоже может встретится в имени).



-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hl9f71$o7...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Alexey Pechnikov
Hello!

On Sunday 14 February 2010 20:18:18 Serhiy Storchaka wrote:
> > awk 'BEGIN {OUT=0} /^-/ {BASE=NR; OUT=!OUT} /^[^-]/ { if (OUT) { if
> > ((NR-BASE)%2) { FILENAME=substr($0,2) } else {print $1, "\t", $4, $5,
> > "\t", FILENAME } } }'
> 
> Можно и так (только "\t" лишние).

\t не лишние, поскольку результат еще надо потом разобрать на поля и в базу 
сложить. Я там на всякий случай зарезервировал 4 поля на усмотрение 
пользователя, ежели кому захочется дополнительную информацию собирать.
А уж распарсить строку с фиксированным числом полей, разделенных табом,
далее уже элементарно.

> Или короче:
> 
> awk '/^-+$/ {OUT+=1; next}
> OUT==1 {FILENAME=substr($0,2); getline; print $1, $4, $5, FILENAME}'

Здорово, мне нравится.

Best regards, Alexey Pechnikov.
http://pechnikov.tel/


Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Serhiy Storchaka
Serhiy Storchaka wrote:
> Можно и на чистом sed-е сделать.

sed -nre '1,/^-+$/d;/^-+$/,$d;N;s/ (.*)\n +([0-9]+) +[0-9]+ +[0-9]+% 
+([0-9]+-[0-9]+-[0-9]+) +([0-9]+:[0-9]+) .*$/\2 \3 \4 \1/p'

Но на shell или скриптовом языке общего назначения разумеется гибче будет.



-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hl9b61$b2...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Serhiy Storchaka
Alexey Pechnikov wrote:

> awk 'BEGIN {OUT=0} /^-/ {BASE=NR; OUT=!OUT} /^[^-]/ { if (OUT) { if
> ((NR-BASE)%2) { FILENAME=substr($0,2) } else {print $1, "\t", $4, $5,
> "\t", FILENAME } } }'

Можно и так (только "\t" лишние). Или короче:

awk '/^-+$/ {OUT+=1; next}
OUT==1 {FILENAME=substr($0,2); getline; print $1, $4, $5, FILENAME}'


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hl9ajg$8p...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Serhiy Storchaka
Alexey Pechnikov wrote:
> Фантастика! А если в архиве поддиректории есть, возможно в такой же формат
> привести?

sed -re '1,/^-+$/d;/^-+$/,$d' \
| while read name && read size packed ratio date time attr crc meth ver
do
echo "$size $date $time $name"
done

Или сразу вместо echo исполнять необходимые действия.

Можно и на чистом sed-е сделать. Ну а на перле/питоне/тикле будет не
сложнее.

> То есть в зависимости индексатора нужно ставить non-free версию?

unrar | rar
Нет нужды в unrar, если rar уже стоит.


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hl99h8$6s...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Alexey Pechnikov
Hello!

On Sunday 14 February 2010 18:47:13 Alexey Pechnikov wrote:
> если в архиве поддиректории есть, возможно в такой же формат привести?

Вот так получается:

rar v A_Kiselev_Polkovodtsyi_i_voenachalniki_Velikoy_Otechestvennoy_voynyi.rar |
awk 'BEGIN {OUT=0} /^-/ {BASE=NR; OUT=!OUT} /^[^-]/ { if (OUT) { if 
((NR-BASE)%2) { FILENAME=substr($0,2) } else {print $1, "\t", $4, $5, "\t", 
FILENAME } } }' 

Best regards, Alexey Pechnikov.
http://pechnikov.tel/


Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Alexey Pechnikov
Hello!

On Sunday 14 February 2010 17:32:41 Serhiy Storchaka wrote:
> sed -nre '/^-+$/,/^-+$/{s/ (.*) +([0-9]+) +[0-9]+ +[0-9]+% 
> +([0-9]+-[0-9]+-[0-9]+) +([0-9]+:[0-9]+) +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+$/\2 \3 
> \4 \1/p}'

Фантастика! А если в архиве поддиректории есть, возможно в такой же формат 
привести?


$ rar vt 
A_Kiselev_Polkovodtsyi_i_voenachalniki_Velikoy_Otechestvennoy_voynyi.rar 

RAR 3.91   Copyright (c) 1993-2009 Alexander Roshal   12 Dec 2009
Shareware version Type RAR -? for help

Archive A_Kiselev_Polkovodtsyi_i_voenachalniki_Velikoy_Otechestvennoy_voynyi.rar

Pathname/Comment
  Size   Packed Ratio  Date   Time Attr  CRC   Meth Ver
   Host OSSolid   Old
---
 полководцы
 00   0% 07-08-08 20:52  .D.    m0  2.0
  Win95/NT   No   No
 полководцы/полководцы.doc
   3043328  1704158  55% 07-08-08 20:48  .A.   D3016AC6 m3g 2.9
  Win95/NT   No   No
 полководцы/полководцы_218x380.jpg
 2778827788 100% 07-08-08 20:51  .A.   991E8D19 m0g 2.9
  Win95/NT   No   No
---
3  3071116  1731946  56%


> > P.S. unrar-free кириллицу в именах не понимает. Это лечится или только
> > unrar-nonfree придется использовать?
> 
> Можно поиграться локалью и перекодировками. Костыль тот ещё будет. В любом 
> случае большинство архивов rar сейчас версии 3+, поэтому unrar-nonfree 
> неприменим.

То есть в зависимости индексатора нужно ставить non-free версию?


Best regards, Alexey Pechnikov.
http://pechnikov.tel/


Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Serhiy Storchaka
Andrey Rahmatullin wrote:
> On Sun, Feb 14, 2010 at 04:32:41PM +0200, Serhiy Storchaka wrote:
>> Можно поиграться локалью и перекодировками. Костыль тот ещё будет. В
>> любом случае большинство архивов rar сейчас версии 3+, поэтому
>> unrar-nonfree неприменим.
> *unrar-free

Да.



-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hl91q3$gn...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Serhiy Storchaka
Alexey Pechnikov wrote:
> Интересует размер файла, дата добавления в архив или дата последней
> модификации, имя файла в архиве. Для zip,7z, etc. все легко и просто -
> вывели список файлов в архве, грепнули, позвали awk и готово. Но вот
> rar архив отличился - имя файла выдает _первым_ аргументом, а не
> последним! Спрашивается, что с этим финтом делать. Думал про реверс
> строки - но потом придется как-то соединять с отдельно извлекаемыми
> именами файлов. Возможно, что из подробного листинга надо вычесть
> краткий (только имена файлов) и потом распарсить - но можно ли это
> сделать в шелле и без создания временных файлов?

sed -nre '/^-+$/,/^-+$/{s/ (.*) +([0-9]+) +[0-9]+ +[0-9]+% 
+([0-9]+-[0-9]+-[0-9]+) +([0-9]+:[0-9]+) +[^ ]+ +[^ ]+ +[^ ]+ +[^ ]+$/\2 \3 \4 
\1/p}'

> P.S. unrar-free кириллицу в именах не понимает. Это лечится или только
> unrar-nonfree придется использовать?

Можно поиграться локалью и перекодировками. Костыль тот ещё будет. В любом 
случае большинство архивов rar сейчас версии 3+, поэтому unrar-nonfree 
неприменим.


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/hl90t5$eg...@ger.gmane.org



Re: Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Alexandr Sagadeev

Alexey Pechnikov пишет:

Hello!



$ unrar l A_A_Bayatev_Azbuka_zhilya._Zhilischnyiy_kodeks_ot_A_do_Ya.rar

UNRAR 3.80 beta 2 freeware  Copyright (c) 1993-2008 Alexander Roshal

Archive A_A_Bayatev_Azbuka_zhilya._Zhilischnyiy_kodeks_ot_A_do_Ya.rar


Попробуйте не l, а v.
unrar v 
A_A_Bayatev_Azbuka_zhilya._Zhilischnyiy_kodeks_ot_A_do_Ya.rar


Имя файла в архиве будет на отдельной строке, а остальное 
легко парсится.



--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/4b77ffc7.8010...@mail.ru



Получение информации о файлах в rar архиве

2010-02-14 Пенетрантность Alexey Pechnikov
Hello!

Интересует размер файла, дата добавления в архив или дата последней 
модификации, имя файла в архиве. Для zip,7z, etc. все легко и просто -
вывели список файлов в архве, грепнули, позвали awk и готово. Но вот
rar архив отличился - имя файла выдает _первым_ аргументом, а не 
последним! Спрашивается, что с этим финтом делать. Думал про реверс 
строки - но потом придется как-то соединять с отдельно извлекаемыми 
именами файлов. Возможно, что из подробного листинга надо вычесть 
краткий (только имена файлов) и потом распарсить - но можно ли это 
сделать в шелле и без создания временных файлов?

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

$ unrar l A_A_Bayatev_Azbuka_zhilya._Zhilischnyiy_kodeks_ot_A_do_Ya.rar

UNRAR 3.80 beta 2 freeware  Copyright (c) 1993-2008 Alexander Roshal

Archive A_A_Bayatev_Azbuka_zhilya._Zhilischnyiy_kodeks_ot_A_do_Ya.rar

 Name Size   Packed Ratio  Date   Time Attr  CRC   Meth Ver
---
 Азбука жилья. Жилищный кодекс от А до Я.pdf  1477661  1443226  97% 07-07-08 
19:21  .A.   4622E342 m5f 2.9
---
1  1477661  1443226  97%


$ unrar lb A_A_Bayatev_Azbuka_zhilya._Zhilischnyiy_kodeks_ot_A_do_Ya.rar
Азбука жилья. Жилищный кодекс от А до Я.pdf

В общем, вижу два потенциальных пути решения, но не уверен, что они
реализуемы при заданных ограничениях, и вдобавок оба пути - закоулками. 
Есть ли более прямой путь?

P.S. unrar-free кириллицу в именах не понимает. Это лечится или только
unrar-nonfree придется использовать?

Best regards, Alexey Pechnikov.
http://pechnikov.tel/