2015-09-14 240 views
0

基本上在網頁上有一個目錄列表,每個目錄都有更多的子目錄。子目錄包含許多文件,我想從我的Linux機器上的一個位置下載一個文件,每個子文件夾中都有特定的序列號'RMD'。wget:下載目錄/子目錄中的所有文件

例如,說主目錄鏈接到目錄dir1,dir2,dir3 ...,並且每個目錄都有子目錄dir1a,dir1b ...,dir2a,dir2b ...等。我想要下載形式:

webpage/dir1/dir1a/file321RMD210 
webpage/dir1/dir1b/file951RMD339 
... 
webpage/dir2/dir2a/file416RMD712 
webpage/dir2/dir2b/file712RMD521 

目錄/子目錄未按順序在上面的例子中編號一樣(這只是我使它更易於閱讀),那麼有沒有一個終端命令,將遞歸遍歷每個目錄和子目錄,並下載每個文件的文件名中都帶有字母'RMD'?

該網站的問題是:here

我希望這是足夠的信息。

+0

是有一個目錄列表在網站上?或者它只是文件夾中的文件?如果沒有公開列表,則無法知道存在哪些文件。如果有文件列表,你需要做一些事情來獲取這個列表,提取每個網址,訪問它們,提取每個網址......等等。你肯定有一些工具可以在網上找到從某個網址抓取網站可能會這樣做,但我無法命名或推薦任何。 –

+0

我已經添加了主帖的網站鏈接。我可以手動轉到每個目錄/子目錄並下載每個文件,但這需要很長時間。另外,知道如何自動爲將來做這件事會很有用。 –

回答

2

我注意到這個網站支持FTP協議,這是一種更方便的閱讀文件和文件夾的方式。 (它用於傳輸文件,而不是網頁)

獲得一個FTP客戶端(大量的),並打開ftp://atmos.nmsu.edu/PDS/data/mslrem_1001/DATA/,你可能只是突出顯示那裏的所有文件夾,並點擊下載。

1

有很多言論的一個答案:

萬一網站支持FTP,你最好使用@MichaelBaldry's answer。這個答案旨在給出一個方法來做到這一點wget(但對服務器和客戶端來說效率較低)。

只有在情況下,網站可與一個目錄列表,則可以使用-r標誌這(在-R標誌的目的是找到網頁中的鏈接,然後下載這些網頁爲好)。

下面的方法是低效服務器和客戶端並可能導致巨大的負荷,如果網頁是動態生成的。您還提到的網站明確要求不要以這種方式獲取數據

wget -e robots=off -r -k -nv -nH -l inf -R jpg,jpeg,gif,png,tif --reject-regex '(.*)\?(.*)' --no-parent 'http://atmos.nmsu.edu/PDS/data/mslrem_1001/DATA/' 

有:

  • wget你要調用的程序;
  • -e robots=off;您忽略網站請求不會自動下載的事實;
  • -r:你遞歸下載;
  • -R jpg,jpeg,gif,png,tif:拒絕下載媒體(小圖片);
  • --reject-regex '(.*)\?(.*)'請勿關注或下載查詢頁面(對索引頁進行排序)。
  • -l inf:您保留下載的無限級
  • --no-parent:防止wget從開始獲取的網站(例如在..鏈接到父目錄)的父鏈接。


wget下載文件廣度優先所以你將不得不等待很長一段時間它最終開始取真實的數據文件之前。


注意wget有沒有辦法猜測在服務器端的目錄結構。它只是旨在找到提取的頁面中的鏈接,因此這些知識旨在生成「可見」文件的轉儲。網絡服務器可能沒有列出所有可用的文件,因此wget將無法​​下載所有文件。

1

一種解決方案使用saxon-lint

saxon-lint --html --xpath 'string-join(//a/@href, "^M")' http://atmos.nmsu.edu/PDS/data/mslrem_1001/DATA/ | awk '/SOL/{print "http://atmos.nmsu.edu/PDS/data/mslrem_1001/DATA/"$0}' | while read url; do saxon-lint --html --xpath 'string-join(//a/@href, "^M")' "$url" | awk -vurl="$url" '/SOL/{print url$0}'; done | while read url2; do saxon-lint --html --xpath 'string-join(//a/@href, "^M")' "$url2" | awk -vurl2="$url2" '/RME/{print url2$0}'; done | xargs wget 

編輯

"^M" 

通過控制 + 中號(UNIX)或\r\n窗戶

相關問題