Pobieram witrynę z wget i do wielu linków dołączone są zapytania, więc kiedy to zrobię:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Skończyło się z wieloma takimi plikami:
1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz
Chciałbym skończyć z:
1.mp3
2.mp3
3.mp3
To wszystko dzieje się w Ubuntu Linux i mam wget 1.10.2.
Wiem, że mogę to zrobić po otrzymaniu wszystkiego za pomocą skryptu, aby zmienić nazwę wszystkiego. Jednak naprawdę chciałbym rozwiązania z poziomu wget, aby zobaczyć prawidłowe nazwy w trakcie pobierania.
Czy ktoś może mi pomóc to rozwiązać?
wget
poleceń (jeśli nie mniej).Odpowiedzi:
Jeśli serwer jest miły, może przyklejać do pobierania nagłówek Content-Disposition, informując klienta o poprawnej nazwie pliku. Powiedzenie wget, aby odsłuchało ten nagłówek dla końcowej nazwy pliku, jest tak proste, jak:
Aby korzystać z tej funkcji, potrzebujesz nowej wersji wget.
Nie mam pojęcia, jak dobrze radzi sobie z serwerem żądającym nazwy pliku „/ etc / passwd”.
źródło
?v=blah
wersjonowaniem typów. Nie może istnieć jakiś specyficzny dla chmury sposób na zażądanie dokumentu bez nich, nie wiem, ale nie udało mi się go znaleźć, więc w takim przypadku może być potrzebna coś takiego jak jedna z pozostałych odpowiedzi. (Jeśli ktoś zna sposób na rozebranie - lub nakłonienie Cloudfront, aby nie służył -v=
struny, chciałbym o tym usłyszeć.)Po przetworzeniu dużej partii zrozumiałem, że powinienem był
wget
zignorować ciągi zapytania. Nie chciałem tego robić od nowa, dlatego stworzyłem ten skrypt, który działał dla mnie:Umieść to w pliku podobnym do
rmqstr
ichmod +x rmqstr
Składnia:./rmqstr <directory (defaults to .)>
Spowoduje to rekurencyjne usunięcie ciągów zapytań ze wszystkich nazw plików.
źródło
Myślę, że
wget
aby zapisać jako nazwę pliku inną niż adres URL, musisz użyć-O filename
argumentu. To robi tylko to, co chcesz, jeśli nadasz mu pojedynczy adres URL - w przypadku wielu adresów URL cała pobrana zawartość kończy się wfilename
.Ale to naprawdę odpowiedź. Zamiast próbować zrobić to wszystko w jednym
wget
poleceniu, użyj wielu poleceń. Teraz Twój przepływ pracy staje się:wget
aby uzyskać podstawowe pliki HTML zawierające linki;mp3
,http://foo/bar/baz.mp3?gargle=blaster
nabaz.mp3
wget <URL> -O <filename>
To rozwiązuje problem, ale teraz musisz dowiedzieć się, jak pobrać pliki podstawowe, aby znaleźć
mp3
adresy URL.Czy masz na myśli konkretny adres witryny / podstawowy? Kroki 1 i 3 będą łatwiejsze do wykonania na konkretnym przykładzie.
źródło
DOBRZE. Używaj wget tak jak zwykle; użyj skryptu post-wget, którego zwykle używasz, ale przetwarzaj dane wyjściowe wget, aby było łatwiejsze dla oczu:
Będzie to nadal wyświetlać podczas
?foo=bar
pobierania, ale wyświetli resztę nazwy w jasnobłękitnym kolorze.źródło
Mam podobne podejście jak @Gregory Wolf, ponieważ jego kod zawsze tworzył komunikaty o błędach:
Dlatego najpierw sprawdzam, czy w nazwie pliku znajduje się ciąg zapytania, przed przeniesieniem pliku:
Spowoduje to rekursywne sprawdzenie każdego pliku i usunięcie wszystkich ciągów zapytań w nazwach plików, jeśli są one dostępne.
źródło
Spójrz na te dwa polecenia, które utworzyłem, aby sklonować witrynę, a po zakończeniu klonowania możesz wykonać drugie polecenie.
Drugie polecenie sprawdzi cały klon, wyszuka nazwy wzorców plików „ ? ” I usunie ciąg zapytania z nazwy pliku.
(Zobacz w GitHub Gist .)
źródło
Jeszcze łatwiej jest to: /unix/196253/how-do-you-rename-files-specifically-in-a-list-that-wget-will-use
Sugeruje to metodę, która zasadniczo używa funkcji zmiany nazwy wget (może być zmieniona w celu włączenia katalogu) dla wielu plików. Zobacz drugą proponowaną wersję.
źródło