wget ma taką opcję, -np
która uniemożliwia pobieranie plików z dowolnego katalogu nadrzędnego. Potrzebuję czegoś podobnego, ale nieco bardziej elastycznego. Rozważać:
www.foo.com/bar1/bar2/bar3/index.html
Chciałbym uzyskać wszystko, ale nie „wyżej” (w hierarchii drzew) niż bar2
(!). Dlatego bar2
też należy je pobrać, ale nie należy bar1
.
Czy istnieje sposób na uczynienie wget bardziej selektywnym?
Tło: Próbuję wykonać kopię lustrzaną witryny o podobnej logicznej strukturze - punkt początkowy, potem w górę, a następnie w dół. Jeśli istnieje inne narzędzie wget
, lepiej dostosowane do takiego układu, daj mi również znać.
Aktualizacja
Lub zamiast określania możliwej głębokości, może coś w stylu „bez rodziców, chyba że pasują do tego lub tego adresu URL”.
Aktualizacja 2
Na serwerze jest jakaś struktura, prawda? Możesz to wyobrazić jako drzewo. Zwykle z „--no-parent” zaczynasz od punktu A i schodzisz tylko w dół.
Moim życzeniem jest zdolność do wznoszenia się - wyrażona przez powiedzenie, że dozwolone jest wchodzenie do węzłów X, lub (co jest w 100% równoważne), że wolno jechać do węzła B (gdzie odległość BA = X).
We wszystkich przypadkach zasady zejścia na dół pozostają określone przez użytkowników (na przykład - zejście tylko o poziomy Y).
Jak go przechowywać? W rzeczywistości tak naprawdę nie jest to pytanie - wget
domyślnie odtwarza strukturę serwera, nie ma się czego bać lub nie trzeba niczego naprawiać. Tak więc, w dwóch słowach - jak zwykle.
Aktualizacja 3
Struktura katalogów poniżej - załóżmy, że w każdym katalogu jest tylko jeden plik, w R - R.html i tak dalej. Jest to oczywiście uproszczone, ponieważ możesz mieć więcej niż jedną stronę.
R
/ \
B G
/ \
C F
/ \
A D
/
E
Punktem początkowym jest A (A.html), X = 2 (więc B jest węzłem najwyższego poziomu, który chciałbym pobrać) W tym konkretnym przykładzie oznacza to pobranie wszystkich stron oprócz R.html i G.html. A.html nazywany jest „punktem wyjścia”, bo trzeba zacząć od niego, a nie z B.
Aktualizacja 4
Nazewnictwo jest używane z aktualizacji 3.
wget OPCJE www.foo.com/B/C/A/A.html
Pytanie brzmi, jakie są opcje, aby uzyskać wszystkie strony z katalogu B i poniżej (wiedząc, że musisz zacząć od A.html).
bar2
zostać ściągnięty, ale niebar1
? Gdziebar2
będzie mieszkać? Co się stanie, jeśli dwa lub więcej katalogów, których nie chcesz, mają podkatalogi o identycznych nazwach, czy ich zawartość powinna zostać scalona? Prawie na pewno łatwiej jest po prostu zdobyć całą tę cholerną stronę, a następnie przycinać / przenosić rzeczy, jak chcesz.bar2
katalog i całą jego zawartość. Jeśli to nie to, proszę wyjaśnić.Odpowiedzi:
Nie próbowałem tego, ale użycie -I i -X może dać ci to, czego chcesz. Moje pierwsze próby byłyby podobne
Objaśnienie opcji:
źródło
Musisz dodać końcowy / do adresu URL, inaczej nie dostaniesz tego, czego chcesz.
Jeśli chcesz uzyskać całą zawartość na www.myhostname.com/somedirectory, składnia powinna brzmieć następująco:
Wypróbuj bez końca / i zobacz, co się stanie. Następnie spróbuj z /.
źródło
Myślę, że właściwą odpowiedzią jest
--no-parent
opcja:źródło
Może czegoś mi brakuje, ale jeśli tego właśnie chcesz
działa dla mnie (na twoim przykładzie). Oczywiście dzięki tym opcjom uzyskasz całą strukturę katalogów powyżej, od początku do końca
www.foo.com
. Jeśli chcesz tylkobar2
na najwyższym poziomie, to zrób-nH
pozbywa sięwww.foo.com
i--cut-dirs=1
pozbywabar1
, więcbar2
pobierzesz i jego podkatalogi pobrane do bieżącego katalogu. Aby uzyskać więcej informacji, zobaczman wget
, który jest dość czytelny i zawiera przykłady.źródło
np
), ale szukam ogólnego rozwiązania, gdy najwyższy poziom znajduje się powyżej punktu początkowego.B
(jak w twoim przykładzie), ale raczejA
? Jeśli tak, to dlaczego? Czy to dlatego, że chcesz zautomatyzować jakiś skrypt lub z innego powodu? Nie jestem również pewien, co masz na myśli przez X = 2. Czy to oznacza poziom 2? Jeśli próbujesz pobrać katalogi niżej w drzewie, nie jestem pewien, jak można odróżnićB
odG
.