返回
优化从远程服务器下载文件到 Windows 终端的方法
windows
2024-06-08 04:26:39
从远程服务器下载文件到 Windows 终端的优化方法
问题
希望在 Windows 终端中运行 download.bat
脚本,从大学计算集群(Linux)中的文件夹下载文件到本地目录。但是,下载过程可能会中断,因此需要脚本能够检查 HPC 中的每个要下载的文件是否已存在于本地目录中。
特定要求:
- 如果文件存在,则打印 "文件 *** 已存在于 F:/GeneResource",其中 ** * 为文件名。
- 如果文件不存在于本地目录中,则下载文件。
- 随着本地目录中文件数量的增加,检查文件是否存在的时间会增加。
- 建议只检查上级文件夹,以提高速度。
解决方案:
我们对提供的代码进行了优化,以满足特定要求:
@echo off
rem 定义 HPC 源目录(该文件夹中的所有内容都需要下载)
set HPC_SOURCE=\\storage\myLab\sharedata\LDSC_resource
rem 定义本地目标目录(所有文件都将下载到此本地目录中)
set LOCAL_TARGET=F:\GeneResource
rem 递归遍历 HPC 源目录中的每个文件
for /r "%HPC_SOURCE%" %%a in (*) do (
rem 提取源目录中文件的相对路径
set FILE_PATH=%%~na
rem 构造相应的本地目录路径
set LOCAL_DIR=%LOCAL_TARGET%\!FILE_PATH:\storage\myLab\sharedata\%!
rem 检查文件是否存在
if exist "!LOCAL_DIR!" (
echo 文件 "!FILE_PATH!" 已存在于 %LOCAL_DIR%
) else (
rem 下载文件
scp [email protected]:"!HPC_SOURCE%\!FILE_PATH!" "!LOCAL_DIR!"
echo 已下载 "!FILE_PATH!" 至 %LOCAL_DIR%
)
)
echo 所有下载已完成。
pause
优化点:
- 优化后的代码直接检查文件是否存在,而不是递归遍历所有子文件夹,从而提高了速度。
- 优化后的代码将存在的文件名打印到屏幕上,满足了特定要求。
其他优化建议:
- 使用并行下载工具: 使用
wget
或curl
等并行下载工具可以加快下载速度。 - 限制并发连接数: 设置并发连接数限制可以防止服务器过载。
- 使用增量下载: 如果文件已部分下载,可以使用增量下载工具仅下载剩余部分。
- 存储已下载文件清单: 存储已下载文件清单可以避免重复下载。
常见问题解答:
1. 如何使用该脚本?
将 download.bat
脚本复制到要下载文件的本地目录中,然后在 Windows 终端中运行它。
2. 如何修改源目录和目标目录?
编辑脚本并修改 HPC_SOURCE
和 LOCAL_TARGET
变量以匹配你的源目录和目标目录。
3. 如何并行下载文件?
使用 wget
或 curl
等工具并行下载文件。例如:
wget -c -t 0 -P F:\GeneResource \\storage\myLab\sharedata\LDSC_resource/*
4. 如何限制并发连接数?
使用 --limit-rate
选项限制并发连接数。例如:
wget -c -t 0 -P F:\GeneResource --limit-rate=10M \\storage\myLab\sharedata\LDSC_resource/*
5. 如何存储已下载文件清单?
使用文本文件或数据库存储已下载文件清单。每次下载文件时,将文件名添加到清单中。