🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.os.linux.programowanie
10 messages
10 total messages Started by Dylon Thu, 23 Jun 2011 10:39
Skrypt w bash i problem z if :)
#72234
Author: Dylon
Date: Thu, 23 Jun 2011 10:39
38 lines
2019 bytes
Witam.
Pewnie z politowaniem się uśmiechniecie :) ale mam problem z częścią 
skryptu w bashu (a raczej czystym sh)

Potrzebuję ściągnąć plik 
wget --timeout=120 --timestamping http://serwer/plik
i w przypadku gdy z różnych powodów plik nie zostanie pobrany muszę 
wykonać kilka rzeczy.

Próbowałem z if [-e plik ].. ale problemem jest to że:

1. plik musi być obecny bo wget sprawdza czy nastąpiła zmiana w dacie i 
ściąga tylko nowszy (aby niepotrzebnie nie pracować na starym pliku)
2. jeśli skasuję plik to wget mi go ściągnie niezależnie czy to nowy czy 
stary...

Myślałem też aby się poratować sygnałem błędu z wget-a i wrzucić go do 
if-a, ale to chyba tak łatwo się nie da :(


Ogólna zasada skryptu:

- ściągnij plik z serwera 
- jeśli jest nowszy to wykonaj na nim kilka działań
- jeśli nie - zrób coś innego 

Jeszcze mi łazi po głowie aby zawsze ściągać plik i porównać go z 
istniejącym w taki sposób jak to robi wget ale chyba przy ściągnięciu 
pliku mi się daty ustawią na inne niż oryginalnie na serwerze ?

Poratujcie mnie proszę jakąś podpowiedzią :)


Pozdrawiam
-- 
Maciej Dylski
"[...]Licznik Millera jest lepszym detektorem promieniowania 
i zuzywa o wiele mniej siana...[...]"
Re: Skrypt w bash i problem z if :)
#72235
Author: MaRc
Date: Thu, 23 Jun 2011 12:00
22 lines
1727 bytes
W dniu 23.06.2011 12:39, Dylon pisze:
> Jeszcze mi łazi po głowie aby zawsze ściągać plik i porównać go z 
> istniejącym w taki sposób jak to robi wget ale chyba przy ściągnięciu 
> pliku mi się daty ustawią na inne niż oryginalnie na serwerze ?

próbowałeś wykonać stat na pliku?
#v+
~ $ stat .nanorc
  Plik: `.nanorc'
  rozmiar: 1143      	bloków: 8          bloki I/O: 4096   zwykły plik
Urządzenie: fb02h/64258d	inody: 9699346     dowiązań: 1
Dostęp: (0644/-rw-r--r--)  Uid: ( 1000/  marcin)   Gid: ( 1001/  marcin)
Dostęp:      2011-06-22 15:01:11.416000010 +0200
Modyfikacja: 2011-01-22 10:33:05.000000000 +0100
Zmiana:      2011-06-07 21:35:06.698000001 +0200
Utworzenie:  -
#v-

dodatkowo możesz generować sobie sumy kontrolne plików, i je porównywać.

-- 
MaRc
Re: Skrypt w bash i problem z if :)
#72236
Author: mvoicem
Date: Thu, 23 Jun 2011 12:29
13 lines
1558 bytes
(23.06.2011 12:39), Dylon wrote:
> Myślałem też aby się poratować sygnałem błędu z wget-a i wrzucić go do
> if-a, ale to chyba tak łatwo się nie da:(
>

Niestety - nie da się. Kiedyś wyczytałem że zwracanie rezultatu przez 
wget jest w planach, chyba nawet było w gałęzi rozwojowej, ale nie wiem 
na czym się skończyło, trzebaby zajrzeć.

Możnaby spróbować jakiegoś zamienniga wgeta (curl, coś jeszcze?) może 
któryś z nich zwraca kody błedów.

p. m.
Re: Skrypt w bash i problem z if :)
#72237
Author: michal
Date: Thu, 30 Jun 2011 08:09
17 lines
1692 bytes
mvoicem <mvoicem@gmail.com> wrote:
> (23.06.2011 12:39), Dylon wrote:
>> Myślałem też aby się poratować sygnałem błędu z wget-a i wrzucić go do
>> if-a, ale to chyba tak łatwo się nie da:(
>>
> 
> Niestety - nie da się. Kiedyś wyczytałem że zwracanie rezultatu przez 
> wget jest w planach, chyba nawet było w gałęzi rozwojowej, ale nie wiem 
> na czym się skończyło, trzebaby zajrzeć.

'man lftp' i tam na temat 'status' i pokrewne.  Takoż komenda 'mirror'.
'lftp' potrafi użyć różnych protokołów, a nie tylko ftp.

Nie jest jasne z oryginalnego opisu co to właściwie ma znaczyć, że "coś
poszło źle".

   Michał
Re: Skrypt w bash i problem z if :)
#72238
Author: mvoicem
Date: Thu, 30 Jun 2011 10:16
21 lines
2028 bytes
(30.06.2011 10:09), michal@gortel.phys.ualberta.ca wrote:
> mvoicem<mvoicem@gmail.com>  wrote:
>> (23.06.2011 12:39), Dylon wrote:
>>> Myślałem też aby się poratować sygnałem błędu z wget-a i wrzucić go do
>>> if-a, ale to chyba tak łatwo się nie da:(
>>>
>>
>> Niestety - nie da się. Kiedyś wyczytałem że zwracanie rezultatu przez
>> wget jest w planach, chyba nawet było w gałęzi rozwojowej, ale nie wiem
>> na czym się skończyło, trzebaby zajrzeć.
>
> 'man lftp' i tam na temat 'status' i pokrewne.  Takoż komenda 'mirror'.
> 'lftp' potrafi użyć różnych protokołów, a nie tylko ftp.
>
> Nie jest jasne z oryginalnego opisu co to właściwie ma znaczyć, że "coś
> poszło źle".

Myślę że co najmniej przy connection timeout wget (czy coś) mogłoby 
zwracać "jest źle". A także (jako opcja?) , w przypadku 40x lub 50x.

p. m.
Re: Skrypt w bash i problem z if :)
#72240
Author: Tomek Kańka
Date: Thu, 30 Jun 2011 13:35
49 lines
2339 bytes
mvoicem <mvoicem@gmail.com> napisał(a)
> (23.06.2011 12:39), Dylon wrote:
>> Myślałem też aby się poratować sygnałem błędu z wget-a i wrzucić go do
>> if-a, ale to chyba tak łatwo się nie da:(
>>
>
> Niestety - nie da się. Kiedyś wyczytałem że zwracanie rezultatu przez 
> wget jest w planach, chyba nawet było w gałęzi rozwojowej, ale nie wiem 
> na czym się skończyło, trzebaby zajrzeć.
>
>

"Moj" wget ma w man coś takiego:

EXIT STATUS
       Wget may return one of several error codes if it encounters
problems.

       0   No problems occurred.

       1   Generic error code.

       2   Parse error---for instance, when parsing command-line options, the
           .wgetrc or .netrc...

       3   File I/O error.

       4   Network failure.

       5   SSL verification failure.

       6   Username/password authentication failure.

       7   Protocol errors.

       8   Server issued an error response.

       With the exceptions of 0 and 1, the lower-numbered exit codes take
       precedence over higher-numbered ones, when multiple types of errors are
       encountered.

       In versions of Wget prior to 1.12, Wget's exit status tended to be
       unhelpful and inconsistent. Recursive downloads would virtually always
       return 0 (success), regardless of any issues encountered, and non-
       recursive fetches only returned the status corresponding to the most
       recently-attempted download.

-- 
Tomek
Re: Skrypt w bash i problem z if :)
#72241
Author: mvoicem
Date: Thu, 30 Jun 2011 14:38
18 lines
1726 bytes
(30.06.2011 15:35), Tomek Kańka wrote:
> mvoicem<mvoicem@gmail.com>  napisał(a)
>> (23.06.2011 12:39), Dylon wrote:
>>> Myślałem też aby się poratować sygnałem błędu z wget-a i wrzucić go do
>>> if-a, ale to chyba tak łatwo się nie da:(
>>>
>>
>> Niestety - nie da się. Kiedyś wyczytałem że zwracanie rezultatu przez
>> wget jest w planach, chyba nawet było w gałęzi rozwojowej, ale nie wiem
>> na czym się skończyło, trzebaby zajrzeć.
>>
>>
>
> "Moj" wget ma w man coś takiego:

O, w końcu coś z tym zrobili. Fajnie.

p. m.
Re: Skrypt w bash i problem z if :)
#72239
Author: michal
Date: Fri, 01 Jul 2011 06:58
26 lines
1972 bytes
mvoicem <mvoicem@gmail.com> wrote:
>>
>> Nie jest jasne z oryginalnego opisu co to właściwie ma znaczyć, że "coś
>> poszło źle".
> 
> Myślę że co najmniej przy connection timeout wget (czy coś) mogłoby 
> zwracać "jest źle". A także (jako opcja?) , w przypadku 40x lub 50x.

Nie wiem co to jest "40x lub 50x" ale wget zwraca - z tą uwagą, że "In
versions of Wget prior to 1.12, Wget's exit status tended to be
unhelpful and inconsistent".  Innymi słowy

   if wget <cośtam> ... ; then
      # tutaj jak wszystko dobrze
      ......
   else
      # mamy kłopoty
      ......
   fi

A jak ktoś chce bardziej detalicznie no to trzeba popatrzeć na wartość $?.

Sugerowałem w zamian lftp bo to narzędzie bardziej elastyczne i
konsystentne.

   Michał
Re: Skrypt w bash i problem z if :)
#72242
Author: Dylon
Date: Sun, 03 Jul 2011 22:23
26 lines
1549 bytes
Dnia Thu, 23 Jun 2011 10:39:00 +0000, Dylon napisał(a):


> Poratujcie mnie proszę jakąś podpowiedzią :)

Dziękuję serdecznie za sugestie. 
Na razie poradziłem sobie trochę topornie (ale działa :) ) 

wget --timeout=120 --timestamping http://serwer/plik 2>test
TESTY=`grep "zapisano"<./test|awk '{print $1}'`
if [ -n "$TESTY" ];
...

Z całego komunikatu wyjścia interesuje mnie czy wystąpi tam linijka z 
"bez pobierania" oraz zawężam to do pierwszego słowa bo cała linijka ze 
znakami specjalnymi rozwala ifa.

lftp chyba nie ma (albo mi umknęło) opcji sprawdzania (czy na serwerze 
jest nowszy) istniejącego pliku.


Pozdrawiam
-- 
Maciej Dylski
"[...]Licznik Millera jest lepszym detektorem promieniowania 
i zuzywa o wiele mniej siana...[...]"
Re: Skrypt w bash i problem z if :)
#72243
Author: michal
Date: Mon, 04 Jul 2011 06:06
25 lines
1795 bytes
Dylon <dylon@unknown.pl> wrote:
> 
> lftp chyba nie ma (albo mi umknęło) opcji sprawdzania (czy na serwerze 
> jest nowszy) istniejącego pliku.

Z  'man lftp'
....
       lftp  has builtin mirror which can download or update a whole directory
       tree. There is also reverse mirror (mirror -R) which uploads or updates
       a  directory  tree  on  server. Mirror can also synchronize directories
       between two remote servers, using FXP if available.
....


$ lftp
lftp :~> help mirror
Usage: mirror [OPTS] [remote [local]]
....
     --ignore-time      ignore time when deciding whether to download
 -n, --only-newer       download only newer files (-c won't work)
....
 -N, --newer-than=SPEC  download only files newer than specified time
....

  Michał
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads