wget이 상위 디렉토리에서 지정된 깊이까지 파일을 가져오지 못하도록 비활성화하는 방법이 있습니까?

wget이 상위 디렉토리에서 지정된 깊이까지 파일을 가져오지 못하도록 비활성화하는 방법이 있습니까?

얻다-np상위 디렉터리에서 파일을 가져오는 것을 비활성화하는 옵션이 있습니다 . 비슷하지만 더 유연한 것이 필요합니다. 고려하다:

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

나는 모든 것을 얻고 싶지만 bar2(!) "더 높은"(트리 계층 구조에서) 이상을 얻지 못합니다. 그래서 bar2그것은 또한 가져와야 하지만 그렇지 않습니다 bar1.

wget을 좀 더 선택적으로 만드는 방법이 있나요?

배경: 저는 유사한 논리적 구조(시작점, 위쪽, 아래쪽)를 가진 웹 사이트를 미러링하려고 합니다. 이 레이아웃에 더 적합한 다른 도구가 있으면 wget알려주시기 바랍니다.

고쳐 쓰다

또는 가능한 상향 깊이를 지정하지 않으면 "이 URL 또는 해당 URL과 일치하지 않는 한 상위 항목이 없을 수도 있습니다".

업데이트 2

서버에는 어떤 구조가 있습니다. 그렇죠? 나무처럼 생각하시면 됩니다. 따라서 일반적으로 "--no-parent"를 사용하면 A 지점에서 시작하여 아래로 내려갑니다.

내 소망은 위로 올라갈 수 있는 것입니다. X 노드를 허용하거나 (100% 동일) 노드 B(거리 BA = X)까지 허용하는 것으로 표현됩니다.

모든 경우에 하강 규칙은 사용자 정의 상태로 유지됩니다(예: Y 수준으로만 하강).

어떻게 저장하나요? 실제로 이것은 실제로 문제가 되지 않습니다. wget서버 구조는 기본적으로 다시 생성되므로 여기서는 두려워할 것도 없고 수정할 것도 없습니다. 따라서 두 단어로 말하면 평소와 같습니다.

업데이트 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가 아니라 B부터 시작하세요.

업데이트 4

업데이트 3부터 이름 지정이 사용됩니다.

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

문제는 디렉토리 B 이하에서 모든 페이지를 가져오는 옵션이 무엇인지입니다(A.html에서 시작해야 한다는 것을 알고 있음).

답변1

아직 시도하지는 않았지만 -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.

답변2

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

모든 것을 얻고 싶다면www.myhostname.com/somedirectory그러면 구문은 다음과 같아야 합니다.

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

무슨 일이 일어나는지 시도하거나 보는 데는 끝이 없습니다. 그런 다음 /로 시도해 보세요.

답변3

제 생각에는옳은여기에 대한 답변은 --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.

답변4

어쩌면 내가 뭔가를 놓치고 있을지도 모르지만, 그것이 당신이 원하는 것이라면

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읽기 쉽고 예제가 포함되어 있습니다.

관련 정보