如何使用類似 wget 的工具從 public.me.com 複製別人的文件夾?
如何使用 Unix 工具(如wget,命令行非互動式工具)將文件夾從http://public.me.com/(與iDisk或MobileMe相關的服務)複製到本地文件系統?
問題是 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缺少列表命令。
- 屍體執行良好,但缺少遞歸檢索命令。您可以使用它來獲取列表,然後如上所述檢索單個文件。
它並不完美,並且在這種情況下特別存在一個問題:cadaver
mget
無法處理帶有擴展為帶有空格的文件名的萬用字元的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 擠壓系統上嘗試了這些命令。你的里程可能會有所不同。)