Scripting

如何使用類似 wget 的工具從 public.me.com 複製別人的文件夾?

  • November 29, 2011

如何使用 Unix 工具(如wget命令行非互動式工具)將文件夾從http://public.me.com/(與iDiskMobileMe相關的服務)複製到本地文件系統?

問題是 Web 界面實際上是一個複雜的基於 Javascript 的東西,而不是簡單地公開文件。(即使w3m也無法瀏覽,例如https://public.me.com/rudchenko。)

我的目標是不時以非互動方式更新本地副本,並將下載文件的命令放到腳本中,以便其他人可以執行腳本並下載文件。

類似wget的(類似 rsync、類似git pull的)工具適合我,或者通過 FUSE 安裝網路文件系統然後使用標準 Unix 命令複製目錄的組合就可以了。

我在 Wikipedia 文章(我在上面提到過)中讀到 Apple 提供了對這些服務的WebDAV 訪問權限,並且我還讀到了cadaver,一個類似wget的 WebDAV 客戶端,但我不知道我在哪個地址應該使用只讀(匿名)訪問http://public.me.com/上的文件夾。

也許 Gilles 的評論(目前未使用 WebDAV)是正確的,但幕後似乎仍有一些 WebDAV 的東西:傳遞給瀏覽器的 URL 用於下載帶有目錄的存檔(在按下“下載選定的文件”後" Web 界面頂部的按鈕)如下所示:

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

– 請注意,它提到了“WebDAV”。(如果你很好奇,我嘗試重新使用這個 URL 作為wget的參數,但它失敗了:

$ 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 系統。)

該伺服器顯然正在執行部分或損壞的 WebDAV 實現。請注意,您需要連接到像https://public.me.com/ix/rudchenko這樣的 URL ,而不是普通的 URL https://public.me.com/rudchenko。我嘗試了幾個客戶:

  • 使用 wget 或 curl 等普通 HTTP 下載器,我可以下載一個知道其名稱的文件(例如wget https://public.me.com/ix/rudchenko/directory/filename),但無法獲得目錄列表。
  • FuseDAV本來是我的首選,但無法處理一些缺失的命令。它顯然設法列出了根目錄(在 的輸出中可見fusedav -D),但最終執行了一些返回“PROPFIND failed: 404 Not Found”並鎖定的請求。
  • Nd缺少列表命令。
  • 屍體執行良好,但缺少遞歸檢索命令。您可以使用它來獲取列表,然後如上所述檢索單個文件。

它並不完美,並且在這種情況下特別存在一個問題:cadavermget 無法處理帶有擴展為帶有空格的文件名的萬用字元的args 。

  • Davfs2執行良好。我可以掛載該共享並從中復製文件。唯一的缺點是這不是 FUSE 文件系統,您需要 root 來掛載它或/etc/fstab.
  • 在這種情況下,基於 FUSE 的wdfs -1.4.2- alt0.M51.1工作得非常好,不需要 root(只有 的權限/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 擠壓系統上嘗試了這些命令。你的里程可能會有所不同。)

引用自:https://unix.stackexchange.com/questions/25015