Buduję małe narzędzie, które będzie pobierać pliki za pomocą wget, czytając adresy URL z różnych plików. Ten sam URL może występować w różnych plikach; adres URL może występować nawet w jednym pliku kilka razy. Byłoby nieefektywne, aby pobrać stronę kilka razy (za każdym razem, gdy jej adres znajduje się na liście).Jak obliczyć hash dla ciągu (url) w bash dla buforowania wget
Tak więc, prostym podejściem jest zapisanie pobranego pliku i polecenie, aby go nie pobrać ponownie, jeśli już jest.
To byłoby bardzo proste; jednak adresy URL są bardzo długie (wiele parametrów GET) i dlatego nie mogą być używane jako takie w nazwach plików (wget podaje za długi błąd "Nie można napisać do ... []").
Potrzebuję zmienić nazwę pobranych plików. Ale aby mechanizm buforowania działał, schemat zmiany nazwy musi zaimplementować "jeden URL < => jedna nazwa": jeśli dany adres URL może mieć wiele nazw, buforowanie nie działa (tj. Jeśli po prostu po prostu numery plików w kolejności zostaną znalezione, nie pozwolę wget zidentyfikować, które adresy zostały już pobrane).
Najprostszy schemat zmiany nazwy byłoby obliczyć hash md5 nazwy pliku (i nie samego pliku, który właśnie robi md5sum); to zapewniłoby, że nazwa pliku jest unikatowa i że dany adres URL zawsze będzie zawierał taką samą nazwę.
Można to zrobić w Perlu itp., Ale czy można to zrobić bezpośrednio w bashu lub przy użyciu narzędzia systemowego (RedHat)?
Więc wielkie dzięki za szybką odpowiedź; w Nie zdawałem sobie sprawy, że mogę po prostu użyć md5sum w ten sposób! Nie rozumiem, co mówisz o "nazwie pliku" jednak: kiedy klucz md5 jest obliczany, nie ma jeszcze nazw plików ...? – Bambax
@bambax: Epsilon Prime odnosi się do części pliku adresu URL, na przykład: "index.html". Polecenie "sed" usuwa wszystko, włącznie z ostatnim ukośnikiem. –
@Dennis: Ok, dzięki; ale w takim przypadku na pewno nie chcę po prostu używać nazwy pliku jako części adresu URL, ponieważ różne zestawy parametrów GET powinny powodować buforowanie/pobieranie różnych plików. – Bambax