这不是一个真正的问题 - 但当然欢迎其他答案!:)
有时我需要下载 Apache 目录列表中列出的文件,如下所示:
... 在我的计算机上的给定目录中,我想为此使用命令行工具。
就目前而言wget
,实际上应该有一些开关 - 注意到倾向于wget
下载单个项目 - 或者重建服务器文件夹本地!
因为我花了半个小时才弄清楚那些正确的开关是什么(比如通过 FTP 将远程文件复制到本地),所以我想在这里记录它们;因此上面的链接可以通过以下命令下载:
wget -nd -r -l 1 http://www.gnu-darwin.org/www001/src/ports/net/samba-libsmbclient/work/samba-3.0.28/source/libsmb/
... 在哪里:
-nd
--no-directories
Do not create a hierarchy of directories when retrieving
recursively. With this option turned on, all files will get saved
to the current directory, without clobbering [...]
-r
--recursive
Turn on recursive retrieving.
-l depth
--level=depth
Specify recursion maximum depth level depth. The default maximum
depth is 5.
如果能听到上述命令的替代方法就好了 - 也许使用不同的开关集wget
- 或者使用curl
或其他包......
答案1
过了一段时间,感谢@jw013的指点,以及与 Apache 服务器的目录列表同步 - Unix & Linux Stack Exchange,我终于找到了我的“终极”wget
命令。
假设您在名为 的目录中有一个文件和目录树myfiles_dir
,并让该目录可通过 上的 Apache 目录列表访问http://localhost/shared/myfiles_dir
。然后,您可以使用以下方式在本地同步目录:
wget -r -N --no-parent --reject '*index.html*' -nH --cut-dirs=1 http://localhost/shared/myfiles_dir/
... 在哪里:
-r, --recursive specify recursive download.
-N, --timestamping don't re-retrieve files unless newer than
local.
-np, --no-parent don't ascend to the parent directory.
-R, --reject=LIST comma-separated list of rejected extensions.
-nH, --no-host-directories don't create host directories.
--cut-dirs=NUMBER ignore NUMBER remote directory components.
这会将内容下载到调用目录(工作目录)myfiles_dir
中创建的子目录中,不包含任何残留文件。wget
index.html
请注意,http 链接/地址后的尾部斜杠/
非常重要:如果没有斜杠(例如),在从同一本地工作目录http://localhost/shared/myfiles_dir
重复调用时,目录列表的 HTML 将被保存为多个副本,例如,等等,无论有何开关(尽管,根据要求,不会为内部的任何子目录保存 HTML 目录列表;此外,第一次运行该命令时,不会为保存 HTML 目录列表)。wget
myfiles_dir.1
myfiles_dir.2
myfiles_dir
但是,如果尾部有斜杠 - 如- 在从同一本地位置重复调用后,http://localhost/shared/myfiles_dir/
任何目录(包括“根目录”)的 HTML 目录列表都不会保存。myfiles_dir
wget
答案2
另请参阅-nH
aka--no-host-directories
和--cut-dirs
options。我还经常使用--accept
/-A
和--reject
/ -R
。