从Linux服务器通过SFTP脚本筛选Windows远程目录特定文件
解决方案
这里有几个实用的修改方案,帮你精准筛选出目标文件:
方案1:用grep过滤sftp输出结果
直接在原有管道后追加grep命令,从完整目录列表里挑出特定文件:
echo "ls -l ${TARGET_ICT_DIR}\nquit\n" | sftp ${SFTP_LOGIN} | grep -E 'anchor\.jar|another_target_file\.txt' | tee /tmp/ver_ict_rel_dest_${L_CURR_PID}.txt
- 细节说明:
-E启用扩展正则,支持用|分隔多个目标文件名- 文件名里的
.要转义成\.,避免grep把它当成通配符误匹配(比如anchorXjar这类无关文件) - 如果只筛选单个文件,简化成
grep 'anchor\.jar'即可
方案2:让sftp直接返回指定文件的信息
更高效的方式是在sftp的ls命令里直接指定目标路径,这样sftp只会返回你关心的文件数据,减少不必要的传输:
# 筛选单个文件 echo "ls -l ${TARGET_ICT_DIR}/anchor.jar\nquit\n" | sftp ${SFTP_LOGIN} | tee /tmp/ver_ict_rel_dest_${L_CURR_PID}.txt # 筛选多个文件 echo "ls -l ${TARGET_ICT_DIR}/anchor.jar ${TARGET_ICT_DIR}/utils.jar\nquit\n" | sftp ${SFTP_LOGIN} | tee /tmp/ver_ict_rel_dest_${L_CURR_PID}.txt # 匹配同类型文件(比如所有jar包) echo "ls -l ${TARGET_ICT_DIR}/*.jar\nquit\n" | sftp ${SFTP_LOGIN} | tee /tmp/ver_ict_rel_dest_${L_CURR_PID}.txt
- 优势:
- 结果更精准,不会出现误匹配
- 数据传输量更小,执行速度更快
- 补充:如果目标文件不存在,sftp会返回
No such file or directory提示,可按需用grep -v 'No such file'过滤掉这些行
额外注意事项
- 路径格式:Windows的路径分隔符是
\,在Linux脚本里需要转义成\\,或者直接换成/(sftp协议跨平台支持正斜杠作为路径分隔符) - 特殊字符:如果文件名或路径包含空格,要用双引号包裹,比如
ls -l "${TARGET_ICT_DIR}/anchor test.jar"
内容的提问来源于stack exchange,提问作者RCzone
相关产品推荐
相关产品推荐

