부모 디렉토리에서 지정된 깊이까지 파일을 가져 오는 데 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.