LINUX.ORG.RU

Перегон fb2.zip > fb2.bzip2


0

0

Ести n файлов с "быдло-алдеказла" вот пример:

Джаст_фор_фан.fb2.zip внутри лежит "daimond_dyevid_just_for_fun_rasskaz_nechayannogo_revolyucionera.fb2"

При анзипировании нужно чтобы имя конечного файла было как и имя архива те. "Джаст_фор_фан.fb", а не "daimond_dyevid_just_for_fun_rasskaz_nechayannogo_revolyucionera.fb2.

В идеале надо чтобы скрипт распаковал каждый зип архив, а потом запаковал в bzip2, с запаковкой в bzip проблем нет, а вот как заставить быдлоunzip распаковывать файл с именем архива?

anonymous

>как заставить быдлоunzip распаковывать файл с именем архива?

Например, распаковать во временный каталог, а потом файл из этого каталога переименовать как угодно ;)

router ★★★★★
()

если побыстрому 'с руки' то где-то так :

#!/bin/sh
for zipname in *.zip ; do 
archname=`basename $zipname`
filename=`unzip -lq $zipname | awk 'print $4'`
unzip -c $zipname $filename | bzip -c - > $archname.bz2
done

 

MKuznetsov ★★★★★
()
Ответ на: комментарий от anonymous

> 30% экономии места на носителе с ограниченым объемом.

А зачем хранить на носителе с ограниченным объемом больше того, что нужно? Даже на дискете уместится достаточно fb2.zip для чтения на 2-5 дней.

mind
()
Ответ на: комментарий от MKuznetsov

Спасибо, правда вместо unzip -c надо unzip -p ставить, а то FBReader его не открывает.

anonymous
()
Ответ на: комментарий от MKuznetsov

А как быть если файлы с пробелами? for i in не работает, а как это обойти я забыл, вроде xargs?

anonymous
()

Вот окончательный вариант :

#!/bin/sh
find . -name "*.zip" | while read -r zipname; do
archname=`basename "$zipname" .zip`
filename=`unzip -lqq "$zipname" | awk '{ print $4 }'`
unzip -p "$zipname" $filename | bzip2 -c - > $archname.bz2
done

anonymous
()
Ответ на: комментарий от anonymous

>А как быть если файлы с пробелами? for i in не работает, а как это обойти я забыл, вроде xargs?

Нет, работает. Просто потом $i нужно экранировать: "$i"

router ★★★★★
()
Ответ на: комментарий от anonymous

> 30% экономии места на носителе с ограниченым объемом.

Попробуй 7zip и выкинь унылый bzip2 на помойку. Если нужна скорость pack/unpack -- zip/gunzip, если нужна лучшая компрессия -- 7zip.

anonymous
()
Ответ на: комментарий от anonymous

Я для примера bzip2 взял, жать я буду вобще в SquashFS LZMA, мне надо было распаковать ЗИПы с именем как у архива и все.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.