Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: skrypt bash  (Przeczytany 12832 razy)

Bees

  • Gość
skrypt bash
« dnia: 2007-12-13, 21:47:47 »
Czy jest mozliwosc pobrania ze strony (www) najnowszego pliku o okreslonej masce np u*.zip przy pomocy wget?

Pozdrawiam!

xavery

  • Gość
skrypt bash
« Odpowiedź #1 dnia: 2007-12-14, 10:44:33 »
Tak

Bees

  • Gość
skrypt bash
« Odpowiedź #2 dnia: 2007-12-14, 11:39:27 »
hmm ...
Problem w tym ze nie znam precyzyjnej nazwy i nie bardzo wiem czym sprawdzic date plikow na stronie?

Express

  • Gość
skrypt bash
« Odpowiedź #3 dnia: 2007-12-14, 13:38:41 »
Problem w tym, że nie napisałeś precyzyjnie o co ci chodzi.
Dostałeś już dokładną odpowiedź na swoje pytanie.

Bees

  • Gość
skrypt bash
« Odpowiedź #4 dnia: 2007-12-14, 13:55:47 »
Cytat: Express
Problem w tym, że nie napisałeś precyzyjnie o co ci chodzi.
Dostałeś już dokładną odpowiedź na swoje pytanie.
Dzieki!
Temat rzeczywiscie wyczerpany!

xavery

  • Gość
skrypt bash
« Odpowiedź #5 dnia: 2007-12-14, 15:01:14 »
Cytat: Bees
Dzieki!
Temat rzeczywiscie wyczerpany!
Wyczuwam sarkazm i irytację:))
Jeśli chcesz pobierać plik no to musisz znać przynajmniej wzorzec nazwy pliku. Jeśli na serwerze są tworzone nowe pliki to muszą mieć one jakiś powtarzalny wzorzec nazwy który można zastosować w masce globa.
Pytasz o daty plików - nie wiem czy chodzi Ci o daty utworzenia pliku (tej porządne systemy operacyjne nie zapisują:) ) czy o datę  w nazwie pliku (najprawdopodobniej). Tak czy owak jeśli problem rozwiązany to nie ma co go drążyć  a jeśli problem nadal istnieje to doprecyzuj go.

Bees

  • Gość
skrypt bash
« Odpowiedź #6 dnia: 2007-12-14, 16:28:24 »
Cytat: xavery
Cytat: Bees
Dzieki!
Temat rzeczywiscie wyczerpany!
Wyczuwam sarkazm
No, moze malenki... ;)

Strona www.cos/akt/
zawiera :

upd2007-12-10
upd2007-12-06
upd2007-12-03
...
upd2007-04-10

z tych plikow interesuje mnie z najmlodsza data czyli upd2007-12-10. Niewiadoma to data. Czy jest na to sposob ?

Pozdrawiam!

xavery

  • Gość
skrypt bash
« Odpowiedź #7 dnia: 2007-12-14, 17:59:14 »
Zakładając, że data nie musi być dzisiejsza/wczorajsza to sprawę znacznie komplikuje. W bashu to by było za trudno ale w Perlu napisałem taką funkcję:

sub find_latest {
  use Time::Local;
  my $pfx="upd";
  my @args=@_;
  my %dates;
  foreach (@args){
    s/($pfx)(\\d{4}-\\d{2}-\\d{2})/$2/;
    $dates{timelocal(0,0,0,(split "-")[2],((split "-")[1])-1,(split "-")[0])}=$_;
    }
  return $pfx . $dates{(sort keys %dates)[-1]};
  }


Funkcja pobiera listę nazw plików w formacie updYYYY-MM-DD (format jest ważny, inaczej trzeba zmienić wzorzec podstawiania s/// a także prefiks w zmiennej $pfx). Funkcja zwraca nazwę pliku z najmłodszą datą. Potestuj, zobacz czy sie przyda.

ankul

  • Gość
skrypt bash
« Odpowiedź #8 dnia: 2007-12-15, 12:38:57 »
Witam

Z manuala wget'a
Cytuj
You tried wget http://www.server.com/dir/*.gif, but that
didn't work because HTTP retrieval does not support globbing
Tak więc bez znajomości dokładniej nazwy pliku jest to niemożliwe.

Skrypt którego nie testowałem (na stronie mam 404 - może trzeba się zalogować;
porównywanie dat przez sortowanie pozostawia wiele do życzenia)

#!/bin/bash

files=$(wget www.cos/akt -O - | egrep -o 'upd[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}\\.zip' | sort -r)
set ${files}
wget ${1}
PAX

Bees

  • Gość
skrypt bash
« Odpowiedź #9 dnia: 2007-12-15, 13:42:14 »
Cytat: ankul
Witam

Skrypt którego nie testowałem (na stronie mam 404 - może trzeba się zalogować;
porównywanie dat przez sortowanie pozostawia wiele do życzenia)

#!/bin/bash
files=$(wget www.cos/akt -O - | egrep -o 'upd[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}\\.zip' | sort -r)
set ${files}
wget ${1}
PAX
Dla mnie bomba !!!

mala korekta w ostatniej linii:
files=$(wget www.cos/akt/ -O - | egrep -o 'upd[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}\\.exe' | sort -r)
set ${files}
wget www.cos/akt/${files}
Wielkie dzieki!
Pozdrawiam!

ankul

  • Gość
skrypt bash
« Odpowiedź #10 dnia: 2007-12-15, 15:33:47 »
Witam ponownie

wget www.cos/akt/${files}
na

wget www.cos/akt/${1}
wget www.cos/akt/${files} pobrałoby wszystkie pliki
a
wget www.cos/akt/${1} ma pobrać tylko najnowszy

Może zadziałać również
wget -nc -r -l2 -np -A.zip www.cos/akt/
Sprawdź opcje -l1 vs -l2 i -A "*.zip" vs -A "upd*.zip"

PAX

Bees

  • Gość
skrypt bash
« Odpowiedź #11 dnia: 2007-12-15, 20:16:41 »
...
tak na poczatku probowalem ..
ale zadzialalo tak jak poprawilem

komenda nizej jest bardzo dobra, chociaz nie do konca ja rozumiem mino przegladania man grep... nie znalazlem co znaczy -np
wget -nc -r -l2 -np -A.zip www.cos/akt/
i jednakowo dobrze dziala na SUSE i Cygwinie. Jestem pod wrazeniem.

Dzieki i Pozdrawiam!

ankul

  • Gość
skrypt bash
« Odpowiedź #12 dnia: 2007-12-15, 21:33:29 »
Warto również by było sparwdzić dla pewności opcję
-N
bez niej a z powyższymi wget sparawdza tylko obecność danego pliku na dysku a ignoruje jego czas modyfikacji i rozmiar, z opcją -N weźmie je pod uwagę.

O wget jest bardzo dużo na necie - to "kombajn" do sciągania stronek do przeglądania
offline.
Ja używam go jako downloadera do linków (zamiast wbudowanego w epiphany).

PAX

xavery

  • Gość
skrypt bash
« Odpowiedź #13 dnia: 2007-12-16, 00:43:33 »
Cytat: ankul
Tak więc bez znajomości dokładniej nazwy pliku jest to niemożliwe.
O HTTP to nawet nie wiedziałem ale dla FTP globbing jest możliwy.

Cytat: ankul
porównywanie dat przez sortowanie pozostawia wiele do życzenia)
Ale nie ma innej możliwości sekwencjonowania dat jak ich sortowanie (niezależnie od zastosowanego algorytmu sortowania i metodologii).

pkupcz

  • Gość
skrypt bash
« Odpowiedź #14 dnia: 2008-01-24, 21:52:20 »
Witam!
Może to trywialne pytanie, ale niestety nie umiem znaleźć prostego rozwiązania :/
Generuje codziennie kilka plików kopii zapasowych, funkcją (date +%Y%m%d).
Chciałbym je cyklicznie usuwać, ale nie wszystkie, lecz tylko starsze niż sprzed 2 dni, czyli data -2 dni i nie potrafię tego zrobić :[
Skrypt odpalam w cronie.
Prosiłbym o odpowiedź.
Pozdrawiam