Создание скрипта для wget
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- рядовой
- Сообщения: 24
- Зарегистрирован: 2008-12-24 20:36:31
Создание скрипта для wget
Уважаемые форумчане. Нужна помощь.
Необходимо написать скрипт, который закачивает файлы с нета на сервер (линки берет с файла), упаковывает каждый в zip архив, при этом, если архив больше 20 Мб, то разбивает его на несколько zip'ов. В конце выводит листинг zip архивов в файл. Заранее благодарен
Необходимо написать скрипт, который закачивает файлы с нета на сервер (линки берет с файла), упаковывает каждый в zip архив, при этом, если архив больше 20 Мб, то разбивает его на несколько zip'ов. В конце выводит листинг zip архивов в файл. Заранее благодарен
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- Alex Keda
- стреляли...
- Сообщения: 35477
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: Создание скрипта для wget
Код: Выделить всё
man sh
будет неполучаться - пишите.
Убей их всех! Бог потом рассортирует...
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
зип стал поддерживать многотомные архивы?logles писал(а):при этом, если архив больше 20 Мб, то разбивает его на несколько zip'ов.
-
- рядовой
- Сообщения: 24
- Зарегистрирован: 2008-12-24 20:36:31
Re: Создание скрипта для wget
не думаю. как вариант - файл больше 20 мб разбивать на части, которые затем архивироватьzg писал(а):зип стал поддерживать многотомные архивы?logles писал(а):при этом, если архив больше 20 Мб, то разбивает его на несколько zip'ов.
хорошо, попробую разобратьсяlissyara писал(а):пробуйте.Код: Выделить всё
man sh
будет неполучаться - пишите.
-
- рядовой
- Сообщения: 24
- Зарегистрирован: 2008-12-24 20:36:31
Re: Создание скрипта для wget
Понял, как работает. Вот только не знаю, как получить объем файла, как узнать, на сколько частей разобъет split, и как использовать полученный список файлов для архивации зипом?
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
гм.. тебе точно нужен zip? К примеру, 7z может спокойно делать многотомные архивы, да и сжатие получше.logles писал(а):Вот только не знаю, как получить объем файла, как узнать, на сколько частей разобъет split, и как использовать полученный список файлов для архивации зипом?
-
- проходил мимо
Re: Создание скрипта для wget
а опция `-s' там для чего тогда?zg писал(а):зип стал поддерживать многотомные архивы?
logles писал(а):Понял, как работает. Вот только не знаю, как получить объем файла,
Код: Выделить всё
$ eval $(stat -s emacs-23.0.92.tar.gz)
$ echo $st_size
29418924
$ limit=$((20 * 1 << 20 )) # 20 Mb
$ [ $st_size -gt $limit ] && echo st_size is bigger than 20Mb
st_size is bigger than 20Mb
$ echo "$((st_size / limit + (st_size % limit > 0))) parts total"
2 parts total
$ zip -s20m a.zip emacs-23.0.92.tar.gz
$ du -h a.z*
20M a.z01
8.0M a.zip
если бить по 20Mb, то и делить надо на столько же. Если остаток больше нуля, значит будет на одну часть больше.logles писал(а):как узнать, на сколько частей разобъет split
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
понятия не имеюГость писал(а):а опция `-s' там для чего тогда?

Код: Выделить всё
zg# man zip | col -b | grep '\-s'
Good for exporting files to foreign operating-systems.
looking things, so zip instead maps them into VMS-style status codes.
in a pipe or on a non-seekable device. The old versions of zip or PKZIP
zg#
Код: Выделить всё
zg# zip
Copyright (c) 1990-2006 Info-ZIP - Type 'zip "-L"' for software license.
Zip 2.32 (June 19th 2006). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
The default action is to add or replace zipfile entries from list, which
can include the special name - to compress standard input.
If zipfile and list are omitted, zip compresses stdin to stdout.
-f freshen: only changed files -u update: only changed or new files
-d delete entries in zipfile -m move into zipfile (delete files)
-r recurse into directories -j junk (don't record) directory names
-0 store only -l convert LF to CR LF (-ll CR LF to LF)
-1 compress faster -9 compress better
-q quiet operation -v verbose operation/print version info
-c add one-line comments -z add zipfile comment
-@ read names from stdin -o make zipfile as old as latest entry
-x exclude the following names -i include only the following names
-F fix zipfile (-FF try harder) -D do not add directory entries
-A adjust self-extracting exe -J junk zipfile prefix (unzipsfx)
-T test zipfile integrity -X eXclude eXtra file attributes
-y store symbolic links as the link instead of the referenced file
-R PKZIP recursion (see manual)
-e encrypt -n don't compress these suffixes
zg#
Код: Выделить всё
zg# zip -s1m new
zip error: Invalid command arguments (no such option: s)
zg#
- f_andrey
- майор
- Сообщения: 2651
- Зарегистрирован: 2007-12-26 1:22:58
- Откуда: СПб
- Контактная информация:
Re: Создание скрипта для wget
zg писал(а):нету тут -s... да винрар не умеет делать многтомные зипы
man zip писал(а):-s splitsize
--split-size splitsize
zip -s 670m -r foo bar
Код: Выделить всё
uname -mr
8.0-CURRENT amd64



Надо пользоваться ПРАВИЛЬНОЙ ОС
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
гм... а что в паривльный ос идут другие порты или встроили поддержку zip?f_andrey писал(а):![]()
![]()
![]()
Надо пользоваться ПРАВИЛЬНОЙ ОС
Код: Выделить всё
zg# which zip
zip: Команда не найдена.
zg# uname -a
FreeBSD zg.lissyara.su 7.0-RELEASE FreeBSD 7.0-RELEASE #0: Sun Feb 24 19:59:52 UTC 2008 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
zg#
Код: Выделить всё
zg# cat /usr/ports/archivers/zip/pkg-descr
Zip is a compression and file packaging utility. It is compatible with
PKZIP 2.04g (Phil Katz ZIP) for MSDOS systems. There is a companion to zip
called unzip (of course) which you can also install from the ports/package
system.
WWW: http://www.info-zip.org/Zip.html
zg#
-
- проходил мимо
Re: Создание скрипта для wget
откуда у тебя такое старье? в портах archivers/zip содержит zip 3.0 и в нем *есть*.zg писал(а):Zip 2.32 (June 19th 2006).
Код: Выделить всё
$ man zip | col -b | fgrep -- --split
--split-size splitsize
--split-bell
--split-pause
--split-verbose
Хмм, глядя в CVS-log Makefile'а обновление было не так давно, почти полгода назад
Код: Выделить всё
revision 1.37
date: 2008/08/03 03:18:25; author: ache; state: Exp; lines: +9 -7
Update to 3.0
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
Гость писал(а):ты, наверное, порты вообще не обновлял
Код: Выделить всё
zg# pkg_version -v | grep zip
libzip-0.8 = up-to-date with port
p7zip-4.57 < needs updating (port has 4.65)
unzip-5.52_5 = up-to-date with port
zip-2.32 < needs updating (port has 3.0)
zg#
Гость писал(а):date: 2008/08/03 03:18:25;

Но то, что поддержку сделали, это клёво.
-
- проходил мимо
Re: Создание скрипта для wget
в срезе портов для 7.1 (4 января 2009) и 6.4 (28 ноября 2008) он должен быть. На 7.0 (27 февраля 2008) можно забить, ибо EOL уже под носом (30 апреля 2009). Только у пользователей 6.3 (18 января 2008) могут быть проблемы, однако поддержка касается только самой системы, а не портов.zg писал(а)::ROFL: я бы не стал делать такой скрипт на третьем зипе. Маленький он ещё, костылей можно охапку нацеплять.Гость писал(а):date: 2008/08/03 03:18:25;
а тех, кто пользует старый софт на неподдерживаемых более релизах (4.x, 5.x, 6.0-6.2, 7.0) можно смело отправить в печь^Wигнорировать
Note: unzip не поддерживает многотомные архивы ;)
Код: Выделить всё
$ unzip a.zip
Archive: a.zip
warning [a.zip]: zipfile claims to be last disk of a multi-part archive;
attempting to process anyway, assuming all parts have been concatenated
together in order. Expect "errors" and warnings...true multi-part support
doesn't exist yet (coming soon).
file #1: bad zipfile offset (local header sig): 4
Код: Выделить всё
$ cat a.z* > b.zip
$ unzip b.zip
Archive: b.zip
warning [b.zip]: zipfile claims to be last disk of a multi-part archive;
attempting to process anyway, assuming all parts have been concatenated
together in order. Expect "errors" and warnings...true multi-part support
doesn't exist yet (coming soon).
warning [b.zip]: 20971520 extra bytes at beginning or within zipfile
(attempting to process anyway)
file #1: bad zipfile offset (local header sig): 20971524
(attempting to re-compensate)
inflating: emacs-23.0.92.tar.gz
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
да ну? вот к примеру хостинг от ру-центраГость писал(а):а тех, кто пользует старый софт на неподдерживаемых более релизах (4.x, 5.x, 6.0-6.2, 7.0) можно смело отправить в печь
Код: Выделить всё
Last login: Sun Apr 5 10:17:28 2009 from 89.251.70.150
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 6.2-RELEASE-p8 (HNIC-SMP-ULE-IBM) #3: Tue Oct 28 13:45:07 MSK 2008
%zip
Copyright (c) 1990-2006 Info-ZIP - Type 'zip "-L"' for software license.
Zip 2.32 (June 19th 2006). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
The default action is to add or replace zipfile entries from list, which
can include the special name - to compress standard input.
If zipfile and list are omitted, zip compresses stdin to stdout.
-f freshen: only changed files -u update: only changed or new files
-d delete entries in zipfile -m move into zipfile (delete files)
-r recurse into directories -j junk (don't record) directory names
-0 store only -l convert LF to CR LF (-ll CR LF to LF)
-1 compress faster -9 compress better
-q quiet operation -v verbose operation/print version info
-c add one-line comments -z add zipfile comment
-@ read names from stdin -o make zipfile as old as latest entry
-x exclude the following names -i include only the following names
-F fix zipfile (-FF try harder) -D do not add directory entries
-A adjust self-extracting exe -J junk zipfile prefix (unzipsfx)
-T test zipfile integrity -X eXclude eXtra file attributes
-y store symbolic links as the link instead of the referenced file
-R PKZIP recursion (see manual)
-e encrypt -n don't compress these suffixes
%
Наш биллинг
Код: Выделить всё
Password:
Last login: Fri Apr 3 11:26:51 2009 from 89.251.70.150
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 6.1-RELEASE (STAT) #5: Wed Nov 5 15:49:13 YEKT 2008
Welcome to FreeBSD!
%zip
Copyright (C) 1990-2005 Info-ZIP
Type 'zip "-L"' for software license.
Zip 2.31 (March 8th 2005). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
The default action is to add or replace zipfile entries from list, which
can include the special name - to compress standard input.
If zipfile and list are omitted, zip compresses stdin to stdout.
-f freshen: only changed files -u update: only changed or new files
-d delete entries in zipfile -m move into zipfile (delete files)
-r recurse into directories -j junk (don't record) directory names
-0 store only -l convert LF to CR LF (-ll CR LF to LF)
-1 compress faster -9 compress better
-q quiet operation -v verbose operation/print version info
-c add one-line comments -z add zipfile comment
-@ read names from stdin -o make zipfile as old as latest entry
-x exclude the following names -i include only the following names
-F fix zipfile (-FF try harder) -D do not add directory entries
-A adjust self-extracting exe -J junk zipfile prefix (unzipsfx)
-T test zipfile integrity -X eXclude eXtra file attributes
-y store symbolic links as the link instead of the referenced file
-R PKZIP recursion (see manual)
-e encrypt -n don't compress these suffixes
%
гвест, ты уж извини

- Alex Keda
- стреляли...
- Сообщения: 35477
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: Создание скрипта для wget
я обновляю.
регулярно.
не сразу после выхода софта - чуть позже, но обновляю
регулярно.
не сразу после выхода софта - чуть позже, но обновляю
Убей их всех! Бог потом рассортирует...
-
- рядовой
- Сообщения: 24
- Зарегистрирован: 2008-12-24 20:36:31
Re: Создание скрипта для wget
не совсем разобрался. может кто-нибудь из знающих подскажет готовое решение?
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
не все админы одинаково полезныlissyara писал(а):я обновляю.
регулярно.
не сразу после выхода софта - чуть позже, но обновляю

-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
ты скрипт выложи, а то не совсем ясно куда рыть и чего тебе нехватаетlogles писал(а):не совсем разобрался. может кто-нибудь из знающих подскажет готовое решение?
-
- рядовой
- Сообщения: 24
- Зарегистрирован: 2008-12-24 20:36:31
Re: Создание скрипта для wget
Для начала у меня не выполняются скрипты путем указания имени файла скрипта. Пишу 1.sh, а в результате -
bash: 1.sh: command not found
bash: 1.sh: command not found
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
logles писал(а):Для начала у меня не выполняются скрипты путем указания имени файла скрипта. Пишу 1.sh, а в результате -
bash: 1.sh: command not found
Код: Выделить всё
chmod +x 1.sh
./1.sh
-
- рядовой
- Сообщения: 24
- Зарегистрирован: 2008-12-24 20:36:31
Re: Создание скрипта для wget
Вот что у меня получилось:
Не уверен насчет содержимого цикла FOR. Преименовываю для того, чтобы в винде с помощью тотала можно было собрать
. Помогите довести до ума скрипт
Код: Выделить всё
#!/bin/sh
a=$(stat -c%s $1)
min=20971520
i=$(expr $a / $min)
i=$(expr $i + 1) #кол-во частей
if [$i -gt ]
then
split -a 3 -d -b 20m $1 file. #делит файл
for [j=1 -gt $i]
do
j0=$(expr $j - 1)
mv file.00${j0} file.00${j} #переименовывает файл для того, чтобы первым был *.001, а не *.000
zip file.00${j}.zip file.00${j}
rm -f file.00${j}
done
rm -f $1
echo 'ok'
fi
exit

-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
logles писал(а):Не уверен насчет содержимого цикла FOR.

а что это выражение означает? распиши смысл каждой строки, тогда будет проще и тебе и нам -)logles писал(а):[j=1 -gt $i]
если по-уму, то надо использовать третий зип с ключиком -s или 7z с тем же ключикомlogles писал(а):Помогите довести до ума скрипт

Кстати скрипт работает?
-
- рядовой
- Сообщения: 24
- Зарегистрирован: 2008-12-24 20:36:31
Re: Создание скрипта для wget
скрипт выдает ошибку:
Вообще смысл цикла такой:
условие - пока j <= i, то выполнять переименование, архивирование, удаление исходных частей.
Как только будет упакована последняя часть, цикл заканчивается. Удаляется исходный разбиваемый файл.
Имена частей файлов - file.00*, где * - номер разбитой части (для простоты будем считать, что частей не больше 9)
При этом, установить новую версию зипа нет возможности.
Код: Выделить всё
./1.sh: 13: Syntax error: Bad for loop variable
условие - пока j <= i, то выполнять переименование, архивирование, удаление исходных частей.
Как только будет упакована последняя часть, цикл заканчивается. Удаляется исходный разбиваемый файл.
Имена частей файлов - file.00*, где * - номер разбитой части (для простоты будем считать, что частей не больше 9)
При этом, установить новую версию зипа нет возможности.
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание скрипта для wget
Код: Выделить всё
zg# ls -l
total 2
-rwxr-xr-x 1 root wheel 208 10 апр 23:46 1.sh
-rw-r--r-- 1 root wheel 0 10 апр 23:44 file.rar.000
-rw-r--r-- 1 root wheel 0 10 апр 23:44 file.rar.001
-rw-r--r-- 1 root wheel 0 10 апр 23:44 file.rar.002
-rw-r--r-- 1 root wheel 0 10 апр 23:44 file.rar.003
-rw-r--r-- 1 root wheel 0 10 апр 23:44 file.rar.009
-rw-r--r-- 1 root wheel 0 10 апр 23:44 file.rar.013
zg#
Код: Выделить всё
#!/bin/sh
for FILE in `ls -1 file.* | sort -r`
do
POSITION=${FILE##*.}
POSITION=${POSITION##0}
NEW_NAME=${FILE%%[0-9][0-9][0-9]}$( printf '%03i' $(( $POSITION + 1 )) )
echo mv $FILE $NEW_NAME
done
Код: Выделить всё
zg# ./1.sh
mv file.rar.013 file.rar.014
mv file.rar.009 file.rar.010
mv file.rar.003 file.rar.004
mv file.rar.002 file.rar.003
mv file.rar.001 file.rar.002
mv file.rar.000 file.rar.001
zg#
-
- рядовой
- Сообщения: 24
- Зарегистрирован: 2008-12-24 20:36:31
Re: Создание скрипта для wget
Конечный результат таков:
Вот только при нарезке большого файла скрипт споткнулся на файле с индексом 031:
Код: Выделить всё
#!/bin/sh
a=$(stat -c%s $1)
min=20971520
i=$(expr $a / $min)
if [ $i > 0 ]
then
split -a 3 -d -b 20m $1 file.
for FILE in `ls -1 file.* | sort -r`
do
POSITION=${FILE##*.}
POSITION=${POSITION##0}
NEW_NAME=${FILE%%[0-9][0-9][0-9]}$( printf '%03i' $(( $POSITION + 1 )) )
mv $FILE $NEW_NAME
zip $NEW_NAME.zip $NEW_NAME
rm -f $NEW_NAME
done
rm -f $1
echo Complete...
fi
exit
Код: Выделить всё
adding: file.034 (deflated 1%)
adding: file.033 (deflated 0%)
adding: file.032 (deflated 0%)
adding: file.031
zip error: Interrupted (aborting)
Segmentation fault
adding: file.030^X^C
.....