Помогите со скриптом!

Автор Ta1fun, 09 февраля 2017, 21:24:41

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ta1fun

Здравствуйте!

имеется такая задачка.

Нужно скачать архив в формате gz по ссылке, распаковать его, распакованный файл перенести в определенную директорию с заменой существующего. ну и добавить в cron чтоб выполнялся к примеру в 23:00 каждый день!

Спасибо!

Cообщение объединено 10 Февраля 2017, 17:22:36

я новичек в этом деле, полазил по форумам вот что поучилось из этого. Будет ли работать этот скрипт? незнаю как время поставить чтоб запускался когда надо.

#!/bin/bash
cd /home/user
wget http://example.com/file.gz | gunzip file.gz
SRC=/home/user
DEST=/home/user/new
cd $SRC
for i in $(ls *.txt) #перемещаем файлы с расширением txt
do
mv $i $DEST

exit 0

vic5710

#1
а если wget не докачает до конца?
у тебя не tar.gz архив?
http://wiki.dieg.info/tar
https://inside-it.ru/10-komand-tar-s-primerami-dlya-sozdaniya-raspakovki-arhivov-v-linux/
man crontab
man wget
man tar

Ta1fun

нет именно gz архив

хм.. насчет не докачает не подумал...видимо нужно еще проверить как то докачал или нет )

vic5710

Цитата: Ta1fun от 10 февраля 2017, 15:31:13нет именно gz архив
gzip может запаковать один файл

Ta1fun

#4
все верно в архиве всего 1 файл, просто файл обновляется на сайте и он в доступе только в архиве )

если wget применить с -r -nc то будет ли он без проблем подменять старый файл и докачивать до конца?

vic5710

#5
имхо лучше код возврата использовать

DEST=/home/user/new/
cd $DEST
wget http://example.com/file.gz
RET=$?
if [ "$RET"=="0" ]
then
echo OK
gunzip file.gz
else
echo ERROR
fi

http://www.gnu.org/software/wget/manual/wget.html#Exit-Status

Ta1fun

а при такой распаковке разве файл будет подменятся на новый? т.е. не будет создваться новый типо file1.txt и так далее?

vic5710

что мешает попробовать?

sh-3.2$ ls
1.txt
sh-3.2$ gzip 1.txt
sh-3.2$ ls
1.txt.gz
sh-3.2$ touch 1.txt
sh-3.2$ ls
1.txt 1.txt.gz
sh-3.2$ gunzip -f 1.txt.gz
sh-3.2$ ls
1.txt
sh-3.2$

ZEN

вот пример с распаковкой файла на лету:
#!/usr/bin/env bash

URL="ftp://ftp.perl.org/pub/CPAN/modules/03modlist.data.gz";
OUT_FILE="$HOME/stats.txt";
TMP_FILE="$(mktemp)";

function finally () {
    rm "$TMP_FILE";
}

trap finally EXIT;

curl -s "$URL" | zcat > "$TMP_FILE" && cat "$TMP_FILE" > "$OUT_FILE";

exit 0;
Crimea is Ukraine

Ta1fun

спасибо )) буду читать man и допиливать ))

Ta1fun

#10
что если сначала добавить строку чтоб удалялся файл file.gz командой rm*



DEST=/home/user/new/
cd $DEST
rm *
wget http://example.com/file.gz
RET=$?
if [ "$RET"=="0" ]
then
echo OK
gunzip file.gz
else
echo ERROR
fi

ZEN

эм... нет, не делай так)
DEST=/home/user/new/
cd $DEST

если DEST не существует, то ты не перейдешь из текущей рабочей директории. А если это твой /home, то следующая строка с rm начнет удалять все что попадает под маску (на директории будет ругаться, но файлам хана).
Crimea is Ukraine

vic5710

#12
маны читать надо
Цитата: vic5710 от 11 февраля 2017, 12:46:44gunzip -f

ogost

Используем тэги! Оформляем посты правильно! Или получаем предупреждение!

Ta1fun

#14

rm xmltv.xml;
wget https://www.teleguide.info/download/new3/xmltv.xml.gz || exit;
gunzip xmltv.xml.gz;


вот так надо