如何在BASH循环中将Linux服务器文件复制到本地Windows机器
解决Linux到Windows跨机器文件复制的路径问题
核心问题
你使用的cp命令仅能操作Linux本地文件系统,无法直接访问Windows的外接硬盘路径。之前的命令都将Windows路径当作Linux本地目录名称来创建,导致文件被错误保存到了服务器本地。
正确解决方案
方案1:在Linux服务器用scp推送文件(需Windows开启OpenSSH服务)
先确保Windows已安装并开启OpenSSH服务器,然后执行以下循环命令:
while read name; do scp -R "/home/me/folder/${name}/folder_to_copy" "你的Windows用户名@WindowsIP:/E/me/${name}/" done < /home/me/names_list.txt
- 注意:Windows路径要将
\替换为/,盘符后直接跟/(比如E:\me写成/E/me)。
方案2:在本地Windows用pscp拉取文件(推荐)
使用Putty配套的pscp工具(一般随Putty安装),在Windows命令提示符或PowerShell中执行:
# 单次执行写法 for /f "delims=" %n in (C:\你存放names_list.txt的路径\names_list.txt) do pscp -R 你的Linux用户名@LinuxIP:/home/me/folder/%n/folder_to_copy E:\me\%n\ # 批处理文件写法(将%n改为%%n) for /f "delims=" %%n in (C:\你存放names_list.txt的路径\names_list.txt) do pscp -R 你的Linux用户名@LinuxIP:/home/me/folder/%%n/folder_to_copy E:\me\%%n\
这种方式无需在Windows开启SSH服务,直接在本地环境处理路径,更不易出错。
错误原因说明
- 第一个命令中的
E:\me\'$name'\':Linux会将\视为转义字符,无法识别Windows盘符路径,最终将整个字符串当作本地文件夹名称创建。 - 第二个命令中的
myUsername@myIP:\E:\me\'$name'\':同样被Linux解析为本地文件夹名称,导致文件错误保存到服务器目录。
内容的提问来源于stack exchange,提问作者LT17
相关产品推荐
相关产品推荐

