如何用Bash脚本实现Windows与Linux文件传输及打包集成
远程Linux构建相关文件传输与打包问题解答
问题1:通过Bash脚本将文件从Windows复制到Linux
最常用的方式是借助scp(基于SSH的文件传输工具),前提是Windows机器已经开启OpenSSH Server(Windows 10及以上可在「设置-应用-可选功能」中安装)。
脚本示例
- 复制单个文件:
# 在Bash环境(如Git Bash、WSL或Linux终端)中执行 scp /c/Users/你的用户名/路径/目标文件.txt linux用户名@Linux主机IP:/Linux上的目标路径/
Windows路径在类Unix Bash环境中可以用/c/替代C:\,避免路径转义问题。
- 复制整个目录:
scp -r /c/Users/你的用户名/路径/目标目录/ linux用户名@Linux主机IP:/Linux上的目标路径/
自动化关键:免密登录
为了让脚本无需手动输入密码,需配置SSH免密:
- 在Windows的Bash环境中生成SSH密钥对:
ssh-keygen -t rsa(一路回车采用默认设置) - 将Windows的公钥(
~/.ssh/id_rsa.pub内容)复制到Linux机器的~/.ssh/authorized_keys文件中 - 确保Linux上
~/.ssh/目录权限为700,authorized_keys权限为600
如果需要增量复制文件,也可以用rsync,命令格式类似:
rsync -avz /c/Users/你的用户名/路径/目标文件.txt linux用户名@Linux主机IP:/Linux上的目标路径/
问题2:在Linux的sh脚本中从Windows获取文件并纳入tgz包
核心思路是先把Windows上的文件拉取到Linux本地临时目录,再和编译产物一起打包,最后清理临时文件。
脚本片段示例
假设你的POST_BUILD脚本原本仅打包编译产物,修改后如下:
#!/bin/bash # 1. 创建临时目录存放从Windows拉取的文件 TEMP_DIR="/tmp/windows_import_files" mkdir -p "$TEMP_DIR" # 2. 从Windows拉取需要的文件(需Windows开启SSH服务并配置免密) scp windows用户名@Windows主机IP:/c/Users/你的用户名/路径/需要的文件* "$TEMP_DIR/" # 3. 打包编译产物+Windows拉取的文件 tar czf 最终包名.tgz /path/to/编译产物目录/ "$TEMP_DIR/" # 4. 清理临时目录(可选) rm -rf "$TEMP_DIR"
注意事项
- 确保Linux机器能访问Windows的SSH端口(默认22),防火墙需放行对应端口
- Windows路径在scp命令中可以用
C:/Users/...或转义反斜杠C:\\Users\\...,推荐用正斜杠避免转义麻烦 - 拉取文件时可以用通配符(如
*.dll、*.config)批量获取所需文件
内容的提问来源于stack exchange,提问作者Tal V.
相关产品推荐
相关产品推荐

