부모 디렉토리에서 지정된 깊이까지 파일을 가져 오는 데 wget을 비활성화하는 방법이 있습니까?


11

wget 은 -np부모 디렉토리에서 파일을 가져 오지 못하게하는 옵션 이 있습니다. 비슷하지만 조금 더 유연한 것이 필요합니다. 치다:

www.foo.com/bar1/bar2/bar3/index.html

bar2(!) 보다 "높은"(트리 계층 구조)이 아닌 모든 것을 얻고 싶습니다 . 따라서 bar2가져와야하지만 가져 오지 않아야 bar1합니다.

wget을 더 선택적으로 만드는 방법이 있습니까?

배경 : 비슷한 논리 구조로 시작 지점, 위, 아래로 웹 사이트를 미러링하려고합니다. 이외의 도구가있는 경우 해당 wget레이아웃에 더 적합하면 알려 주시기 바랍니다.

최신 정보

또는 가능한 깊이를 지정하는 대신 "이것이나 해당 URL과 일치하지 않는 한 부모 없음"과 같은 것일 수 있습니다.

업데이트 2

서버에 어떤 구조가 있습니까? 트리로 시각화 할 수 있습니다. 따라서 일반적으로 "-부모 없음"을 사용하면 A 지점에서 시작하여 내려갑니다.

내 소원은 올라갈 수있는 능력입니다 .X 노드까지 올라갈 수 있거나 B 노드 (거리 BA = X)까지 올라갈 수 있습니다 (100 % 동등).

모든 경우에 내려 가기 규칙은 사용자가 정의한대로 유지됩니다 (예 : Y 수준 만 내려 가기).

보관하는 방법? 실제로 문제는 아닙니다. wget기본적으로 서버 구조를 재생성하거나, 여기에 두려워 할 것이 없거나, 아무것도 고칠 필요가 없습니다. 평소와 같이 2 단어로 말입니다.

업데이트 3

아래의 디렉토리 구조-각 디렉토리에는 R-R.html 등의 파일이 하나만 있다고 가정합니다. 하나 이상의 페이지를 가질 수 있기 때문에 이것은 간단합니다.

        R 
       / \
      B   G
     / \
    C   F
   / \
  A   D
 /
E 

A (A.html)는 내 출발점이며 X = 2입니다 (따라서 B는 가져오고 싶은 최상위 노드입니다). 이 특정 예에서 이는 R.html 및 G.html을 제외한 모든 페이지를 가져 오는 것을 의미합니다. A.html는 내가 있기 때문에 "출발점"이라고 해야 그것에서 시작 B.에서하지,

업데이트 4

이름 지정은 업데이트 3에서 사용됩니다.

wget 옵션 www.foo.com/B/C/A/A.html

문제는 디렉토리 B와 그 아래의 모든 페이지를 가져 오는 옵션입니다 (A.html에서 시작해야 함).


당신이 원하는 bar2가져가 아니라 bar1? 어디에 bar2살 것인가? 원하지 않는 두 개 이상의 디렉토리에 동일한 이름의 하위 디렉토리가있는 경우 해당 컨텐츠를 병합해야합니까? 빌어 먹을 사이트 전체를 가져온 다음 원하는대로 물건을 가지 치기 / 옮기는 것이 거의 쉽습니다.
— Kilian Foth

@Kilian Foth, "전체 사이트를 얻는다"는 무슨 뜻입니까? 가져 오는 중? 일반적으로 과잉이므로 MB가 필요할 때 TB를 가져 오는 것을 의미 할 수 있습니다. 나머지는 update2를 참조하십시오.
— greenoldman

당신이 무슨 뜻인지 확실하지. 내가 이해할 수있는 유일한 해석은 bar2디렉토리와 모든 내용 을 원한다는 것 입니다. 그렇지 않은 경우 명확히하십시오.
— Faheem Mitha

@Faheem Mitha, "그 내용"= "전체 하위 트리". 그렇습니다. 이것은 제가 믿는 해석 일뿐입니다. 이것이 바로 제가 의미하는 바입니다.
— greenoldman

답변:


12

나는 그것을 시도하지 않았지만 -I와 -X를 사용하면 원하는 것을 줄 수 있습니다. 나의 첫 번째 시도는

wget -m -I bar1/bar2 -X "*" http://www.foo.com/bar1/bar2/bar3/index.html

옵션 설명 :

-m: 
   --mirror
       Turn on options suitable for mirroring.  This option turns on recursion and time-stamping, sets
       infinite recursion depth and keeps FTP directory listings.  It is currently equivalent to -r -N -l
       inf --no-remove-listing.
-I: list
   --include-directories=list
       Specify a comma-separated list of directories you wish to follow when downloading.  Elements of
       list may contain wildcards.
-X: list
   --exclude-directories=list
       Specify a comma-separated list of directories you wish to exclude from download.  Elements of list
       may contain wildcards.

4

URL에 최종 /를 추가해야합니다. 그렇지 않으면 원하는 것을 얻을 수 없습니다.

www.myhostname.com/somedirectory 에서 모든 컨텐츠를 가져 오려면 구문이 다음과 같아야합니다.

wget -r -nH http://www.myhostname.com/somedirectory/

끝없이 그것을 시도하고 무슨 일이 일어나는지보십시오. 그런 다음 /로 시도하십시오.


1
링크 된 페이지가 다음을 참조하면 여전히 상위 디렉토리로 올라갑니다.
— EkriirkE

슬래시 후미 힌트를 주셔서 감사합니다! 이웃 디렉토리 (형제)에서 wget으로 가져온 관련없는 파일로 문제를 해결하는 데 도움이되었습니다.
— AntonK

4

내가 생각하는 바로 여기에 해답이 있습니다 --no-parent옵션 :

   -np
   --no-parent
       Do not ever ascend to the parent directory when retrieving recursively.
       This is a useful option, since it guarantees that only the files below
       a certain hierarchy will be downloaded.

이 플래그는 OP가 원하는 것과 정확히 반대입니다.
— EkriirkE

1

어쩌면 내가 뭔가를 잃어 버렸지 만, 그것이 당신이 원하는 것이라면

wget -c -np -r www.foo.com/bar1/bar2

나를 위해 일합니다 (예제 사용). 물론 이러한 옵션을 사용하면 위에서부터 모든 디렉토리 구조를 얻을 수 있습니다 www.foo.com. bar2최고 수준에서 원한다면

wget -c -np -r -nH --cut-dirs=1 www.foo.com/bar1/bar2

-nH의 못된 www.foo.com및 --cut-dirs=1제거됩니다 bar1당신이 얻을 것이다, 그래서 bar2그 하위 디렉토리가 현재 디렉토리에 다운로드. 자세한 내용은을 참조하십시오 man wget. 읽을 수 있고 예제가 있습니다.


출발점을 생략 하고 링크 를 따라야합니다. 시작점이 동시에 최상위 수준이라고 가정하지만 (이것은 사소한 경우입니다 np) 최상위 수준이 시작점보다 높으면 일반적인 해결책을 찾고 있습니다.
— greenoldman

@macias : 죄송합니다, 당신을 따르고 있지 않습니다. 예를 들어 설명해 주시겠습니까?
— Faheem Mitha

방금 ASCII "스크린 샷"을 추가했습니다. 이것이 도움이되기를 바랍니다. 이 예에서 A는 시작점입니다.
— greenoldman

@ macias : 따라서 당신의 경로를 지정하고 싶지는 B않지만 오히려 A? 그렇다면 왜 그렇습니까? 스크립트 또는 다른 이유로 자동화하고 싶습니까? 또한 X = 2의 의미를 잘 모르겠습니다. 레벨 2를 의미합니까? 당신이 더 아래 트리에서 디렉토리를 가져 오기 위해 시도하는 경우에, 나는 당신이 구별하는 방법을 모르겠어요 B에서 G.
— Faheem Mitha

A는 시작점이기 때문에 시작점입니다. 서버가 아닌 클라이언트쪽에 있습니다. IOW - 내가 할 NOT 서버를 소유, 나는이 구조를하지 않았다. 나는 내가 보는 것을 다루어야한다. X 는 얼마나 많은 레벨까지 올라갈 수 있는지 "깊이"인 업데이트 2의 상징입니다. B는 B이고, G는 B하지 않기 때문에 당신은 G에서 B를 구별하고 A에 대한 URL의 일부는 내가 업데이트 4에 질문을 고쳐 때문에 당신은 B를 참조
— greenoldman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.