2008-11-07 70 views
421

我有一個Web目錄,我在其中存儲一些配置文件。我想使用wget來拉下這些文件並保持其當前結構。例如,遠程目錄如下所示:使用wget遞歸獲取一個包含任意文件的目錄

http://mysite.com/configs/.vim/ 

.vim保存多個文件和目錄。我想用wget在客戶端複製它。似乎無法找到正確的組合wget標誌來完成這件事。有任何想法嗎?

回答

727

你必須在-np/--no-parent選項傳遞給wget(除了-r/--recursive,當然),否則會請按照我網站上的目錄索引中的鏈接訪問父目錄。所以,命令應該是這樣的:

wget --recursive --no-parent http://example.com/configs/.vim/ 

爲了避免下載自動生成index.html文件,使用-R/--reject選項:

wget -r -np -R "index.html*" http://example.com/configs/.vim/ 
+35

add -nH(切出主機名)--cut-dirs = X(切出X個目錄)。有點煩人的是不得不手動計算X的目錄.. – lkraav 2010-11-08 21:49:46

+1

爲什麼這些工作不能用於http://www.w3.org/History/1991-WWW-NeXT/Implementation/? 它只會下載robots.txt – matteo 2011-11-14 18:56:58

4
wget -r http://mysite.com/configs/.vim/ 

適合我。

也許你有一個干擾它的.wgetrc?

0

你應該能夠做到這一點只需添加一個-r

wget -r http://stackoverflow.com/ 
+8

這實際上並不下載目錄,而是可以在服務器上找到的所有文件,包括您要下載的目錄之上的目錄。 – Luc 2013-03-20 09:38:21

103

要遞歸下載目錄,它拒絕的index.html *文件和下載沒有主機名,父目錄和整個目錄結構:

wget -r -nH --cut-dirs=2 --no-parent --reject="index.html*" http://mysite.com/dir1/dir2/data 
26

下面是完整的wget命令是爲我工作,從服務器的目錄下載文件(忽略robots.txt):

wget -e robots=off --cut-dirs=3 --user-agent=Mozilla/5.0 --reject="index.html*" --no-parent --recursive --relative --level=1 --no-directories http://www.example.com/archive/example/5.3.0/ 
4

如果--no-parent沒有幫助,你可以使用--include選項。

目錄結構:

http://<host>/downloads/good 
http://<host>/downloads/bad 

而且你要下載downloads/good但不downloads/bad目錄:

wget --include downloads/good --mirror --execute robots=off --no-host-directories --cut-dirs=1 --reject="index.html*" --continue http://<host>/downloads/good 
28

你應該使用-m(鏡像)標誌,爲照顧到不亂帶時間戳並無限期地遞歸。

wget -m http://example.com/configs/.vim/ 

如果添加其他人在這個線程中提到的點,那就是:

wget -m -e robots=off --no-parent http://example.com/configs/.vim/ 
2

獲取目錄遞歸使用用戶名和密碼,請使用以下命令:

wget -r --user=(put username here) --password='(put password here)' --no-parent http://example.com/ 
1

Wget 1.18可能會更好地工作,例如,我被一個版本1.12的bug咬了...

wget --recursive (...) 

...只檢索index.html而不是所有文件。

解決方法是注意到一些301重定向,並嘗試新的位置 - 給定新的URL,wget獲取目錄中的所有文件。

0

該版本以遞歸方式下載,不會創建父目錄。

wgetod() { 
    NSLASH="$(echo "$1" | perl -pe 's|.*://[^/]+(.*?)/?$|\1|' | grep -o/| wc -l)" 
    NCUT=$((NSLASH > 0 ? NSLASH-1 : 0)) 
    wget -r -nH --user-agent=Mozilla/5.0 --cut-dirs=$NCUT --no-parent --reject="index.html*" "$1" 
} 

用法:

  1. 加入~/.bashrc或粘貼到終端
  2. wgetod "http://example.com/x/"
0

所有你需要的是兩個標誌,一個是"-r"遞歸和"--no-parent"(或-np)爲了不去'.'".."。就像這樣:

wget -r --no-parent http://example.com/configs/.vim/

就是這樣。它將下載到以下本地樹中:./example.com/configs/.vim。 但是,如果你不想前兩個目錄,然後使用附加標誌--cut-dirs=2的建議在早期回覆:

wget -r --no-parent --cut-dirs=2 http://example.com/configs/.vim/

它會下載你的文件樹只進./.vim/

事實上,我從第wget manual這個答案中得到了第一行,這是第4.3節結尾的一個非常簡單的例子。

相關問題