基于ubuntu nc指令实现远程传输文件到嵌入式设备中
背景:
最近在使用nc进行远程文件传输的时候发现在文件传输完成时,没有正确的反馈,而是界面一直停留在传输阶段,加上使用nc传输需要设置一些诸如-l、 -p等参数,于是想将这些参数包裹在sh脚本中,一键执行脚本,方便快捷,具体如下:
一、本地端:
#!/bin/bash# 初始化ip地址变量为空
ip_address=""
file_name=""# 使用getopts处理-p和-f选项
while getopts p:f: option
docase "${option}"inp) ip_address=${OPTARG};;f) file_name=${OPTARG};;esac
done{ cat "$file_name"; printf '\nEOF\n'; } | nc "$ip_address" 12345
二、远程端:
file_name=" "
# 使用getopts处理-p和-f选项
while getopts f: option
docase "${option}"inf) file_name=${OPTARG};;esac
done
nc -l -p 12345 | while IFS= read -r line
doif [[ "$line" == *EOF* ]]; thenpkill ncelseecho "$line" >> $file_namefi
done
echo "file pass successfully!"
三、执行
1. 先远程端:sh receive.sh -f {文件名称}
2. 后本地端:sh server_send.sh -p {远程ip} -f {文件名称}
四、更新
上述的脚本在传输二进制文件的时候,由于cat指令会造成二进制文件的修改,因此在传输二进制文件的时候可能会出现文件传输不完整的情况,因此将脚本文件修改如下:
一、本地端:
```powershell
#!/bin/bash# 初始化ip地址变量为空
ip_address=""
file_name=""# 使用getopts处理-p和-f选项
while getopts p:f: option
docase "${option}"inp) ip_address=${OPTARG};;f) file_name=${OPTARG};;esac
done# 使用nc命令传输文件
cat "$file_name" | nc -q 1 "$ip_address" 12345二、远程端:
file_name=" "
# 使用getopts处理-p和-f选项
while getopts f: option
docase "${option}"inf) file_name=${OPTARG};;esac
done
nc -l -p 12345 > $file_name
echo "file pass successfully!"剩余的按照第三步执行脚本就可以了,祝好