wget과 같은 도구를 사용하여 public.me.com에서 다른 사람의 폴더를 어떻게 복사할 수 있나요?

wget과 같은 도구를 사용하여 public.me.com에서 다른 사람의 폴더를 어떻게 복사할 수 있나요?

폴더를 복사하는 방법http://public.me.com/(관련 서비스디스크, 또는나를 움직여) 다음과 같은 Unix 도구를 사용하여얻다,명령줄 비대화형 도구)?

문제는 웹 인터페이스가 실제로는 단순히 파일을 노출하는 것이 아니라 복잡한 자바스크립트 기반이라는 점입니다. (심지어w3m탐색할 수 없습니다.https://public.me.com/rudchenko.)

내 목표는 때때로 로컬 복사본을 비대화식으로 업데이트하고 파일을 다운로드하라는 명령을 스크립트에 넣어 다른 사람들이 스크립트를 실행하고 파일을 다운로드할 수 있도록 하는 것입니다.

얻다-좋다(동기화-좋다,자식 당겨-like) 도구가 나에게 적합하거나 FUSE를 통해 네트워크 파일 시스템을 마운트한 다음 표준 Unix 명령을 사용하여 디렉터리를 복사하는 조합도 작동합니다.

Apple에서 제공한 Wikipedia 기사(위에서 언급한 내용)를 읽었습니다.WebDAV 액세스나는 또한 이러한 서비스에 대해 읽었습니다.시체,ㅏ얻다- WebDAV 클라이언트와 비슷하지만 폴더에 액세스하려면 어떤 주소를 사용해야 하는지 모르겠습니다.http://public.me.com/읽기 전용(익명).

WebDAV가 현재 사용되지 않는다는 Gilles의 의견은 맞을 수도 있지만 여전히 WebDAV 작업이 배후에서 진행되고 있는 것 같습니다. URL은 디렉토리와 함께 아카이브를 다운로드하기 위해 브라우저에 전달됩니다(상단의 다운로드 옵션을 누릅니다). 웹 인터페이스 아래와 같이 "정의된 파일" 버튼을 클릭합니다.

https://public.me.com/ix/rudchenko/SEM%20Sep21%201%20TO%20PRINT.zip?webdav-method=ZIPGET&token=1g3s18hn-363p-13fryl0a20-17ial2zeu00&disposition=download

-- "WebDAV"가 언급되어 있습니다. (궁금하시면 이 URL을 매개변수로 재사용해보았습니다.얻다, 그러나 실패했습니다:

$ LC_ALL=C wget 'https://public.me.com/ix/rudchenko/SEM%20Sep21%201%20TO%20PRINT.zip?webdav-method=ZIPGET&token=1g3s18hn-363p-13fryl0a20-17ial2zeu00&disposition=download'
--2011-11-21 01:21:48--  https://public.me.com/ix/rudchenko/SEM%20Sep21%201%20TO%20PRINT.zip?webdav-method=ZIPGET&token=1g3s18hn-363p-13fryl0a20-17ial2zeu00&disposition=download
Resolving public.me.com... 23.32.106.105
Connecting to public.me.com|23.32.106.105|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2011-11-21 01:21:48 ERROR 404: Not Found.
$ 

)

(저는 GNU/Linux를 사용하고 있습니다.)

답변1

서버가 WebDAV의 부분적이거나 손상된 구현을 실행하고 있는 것 같습니다. 다음과 유사한 URL에 연결해야 합니다.https://public.me.com/ix/rudchenko, 일반 URL이 아닙니다.https://public.me.com/rudchenko. 여러 클라이언트를 사용해 보았습니다.

  • wget https://public.me.com/ix/rudchenko/directory/filename일반 HTTP 다운로더(예: wget 또는 컬)를 사용하여 이름을 알고 있는 파일(예: )을 다운로드할 수 있지만 디렉터리 목록을 가져올 수는 없습니다.
  • 퓨즈 DAV나의 첫 번째 선택이었을 , 일부 누락된 명령에 대처할 수 없었습니다. 분명히 루트 디렉터리(출력에 표시됨 fusedav -D)를 나열했지만 결국 "PROPFIND failed: 404 Not Found"를 반환하고 잠기는 일부 요청을 실행하게 됩니다.
  • 네오디뮴목록 명령이 누락되었습니다.
  • 시체훌륭하게 작동하지만 재귀 검색 명령이 누락되었습니다. 이를 사용하여 목록을 가져온 다음 위와 같이 개별 파일을 검색할 수 있습니다.

    완벽하지는 않으며 특히 이 경우에는 한 가지 문제가 있습니다.시체~의mget 공백이 있는 파일 이름으로 확장되는 와일드카드가 있는 인수는 처리할 수 없습니다..

  • DAF 파일 시스템 2좋은 결과. 공유를 마운트하고 여기에서 파일을 복사할 수 있습니다. 유일한 단점은 이것이 FUSE 파일 시스템이 아니기 때문에 마운트하려면 루트가 필요하거나 /etc/fstab.
  • FUSE 기반데이터 파일 시스템-1.4.2-0.M51.1을 대체합니다.이 경우에는 잘 작동합니다. 루트가 필요하지 않습니다(권한만 필요함 /dev/fuse).

    mkdir viewRemote
    wdfs https://public.me.com/ix/rudchenko/ viewRemote
    rsync -a viewRemote/SEM*TO\ PRINT* ./
    fusermount -u viewRemote
    rmdir viewRemote
    

(물론 이 예에서는 간단한 cp대안을 사용하는 rsync것이 좋습니다. rsync복제본을 업데이트할 때 차이점을 추가로 진단하기 위해 선택한 것입니다.)

(나는 wdfs 외에 Debian squeeze 시스템에서 이 명령을 시도했습니다. 상황은 다를 수 있습니다.)

답변2

콘텐츠를 다운로드하기 위한 몇 가지 특수 스크립트와 도구( wget-warc) 도 있습니다.https://public.me.com/사용자 폴더——https://github.com/ArchiveTeam/mobileme-grab/blob/master/dld-me-com.sh(그리고 포함된 저장소를 확인하세요). (발견을 통해http://archiveteam.org/index.php?title=MobileMe#How_to_help_archiving.)

내부적으로 스크립트는 WebDAV 요청을 작성하고 응답을 사용하는 것으로 나타납니다. 예를 들면 다음과 같습니다.

# step 1: download the list of files

if [[ "$domain" =~ "public.me.com" ]]
then

  # public.me.com has real WebDAV

  # PROPFIND with Depth: infinity lists all files
  echo -n "   - Discovering urls (XML)..."
  curl "https://public.me.com/ix/${username}/" \
       --silent \
       --request PROPFIND \
       --header "Content-Type: text/xml; charset=\"utf-8\"" \
       --header "Depth: infinity" \
       --data '<?xml version="1.0" encoding="utf-8"?><DAV:propfind xmlns:DAV="DAV:"><DAV:allprop/></DAV:propfind>' \
       --user-agent "${USER_AGENT}" \
     > "$userdir/webdav-feed.xml"
  result=$?
  if [ $result -ne 0 ]
  then
    echo " ERROR ($result)."
    exit 1
  fi
  echo " done."

  # grep for href, strip <D:href> and prepend https://public.me.com
  grep -o -E "<D:href>[^<]+" "$userdir/webdav-feed.xml" | cut -c 9- | awk '/[^\/]$/ { print "https://public.me.com" $1 }' > "$userdir/urls.txt"
  count=$( cat "$userdir/urls.txt" | wc -l )

elif 

예, 그들은 또한 "https://public.me.com/ix/${username}/", 참고 "/아홉/"URL에 삽입하세요. 일반 URL이 아닙니다. --Giles는 그의 답변에서 같은 것을 발견했습니다..

관련 정보