我们目标是:
A 机(客户端)把整个目录 X 从 B 机(服务器)一次性拉下来,目录结构保持原样,且无需在 B 机装任何额外软件------只用 Python 自带的 http.server 模块。
一、在 B 机(被下载端)操作
-
打开终端,进入你想共享的目录 X 的上一级
例:X 目录的绝对路径是
/home/bob/data/X,就执行bashcd /home/bob/data -
启动只读 HTTP 文件列表服务
端口随意,只要 A 机能连通即可;下面用 2341:
bashpython3 -m http.server 2341 --bind 0.0.0.0说明
0.0.0.0表示监听所有网卡,方便 A 机用任意地址访问。- 该命令不会上传/删除/修改任何文件,只是只读列出并下载。
- 如果你想后台跑:
nohup python3 -m http.server 2341 &
-
确认 B 机的 IP
baship -4 a # 或者 hostname -I假设拿到
192.168.3.100。
二、在 A 机(下载端)操作
-
测试连通性(可选)
bashcurl -I http://192.168.3.100:2341/返回 200 即正常。
-
用
wget镜像整个 X 目录bash# 先进入你想存放的目录 cd ~/download # 递归、保持目录结构、不向上走、把主机当顶级目录 wget -r -np -nH --cut-dirs=0 \ --reject="index.html*","*.tmp" \ http://192.168.3.100:2341/X/参数解释
-r递归下载-np不追到父目录(No Parent)-nH不生成以主机名命名的最外层目录--cut-dirs=0不额外砍掉目录层(0 即可)--reject=...把自动生成的index.html?等垃圾过滤掉,可省。
运行完,A 机当前目录下会出现一个
X/文件夹,内容与 B 机完全一致。 -
断点续传(如果文件很大/网络不稳)
在命令里再加
-c:bashwget -r -np -nH -c http://192.168.3.100:2341/X/
三、收尾
- 传输完成后,在 B 机
Ctrl-C关掉python -m http.server,端口即释放。 - 如果目录里有敏感文件,下次别再开
0.0.0.0,可改成--bind 127.0.0.1仅供本机测试,或加防火墙规则。
四、常见坑速查
| 现象 | 解决 |
|---|---|
A 机 wget 报 "Connection refused" |
B 机防火墙没放行 2341, sudo ufw allow 2341/tcp 或 firewall-cmd --add-port=2341/tcp |
下载下来只有 index.html |
忘了在 URL 最后加 /X/; 或者没加 -r |
出现很多 index.html?C=N;O=D 等文件 |
加 --reject="index.html*" 或直接 rm -f **/index.html* |
五、一句话总结
B 机:
bash
cd /path/to/parent_of_X
python3 -m http.server 2341 --bind 0.0.0.0
A 机:
bash
wget -r -np -nH http://<B_IP>:2341/X/
目录 X 就完整搬过去了。