使用sftp

时间:2018-04-05 23:41:46

标签: shell awk sed grep sftp

使用从Linux服务器执行脚本时在Windows机器目录中列出或输出特定文件的脚本

这是我们获得的当前脚本,它列出了windows目录中的所有内容,但我的要求是过滤掉所需的内容

echo "ls -l ${TARGET_ICT_DIR}\nquit\n" | sftp ${SFTP_LOGIN} | tee /tmp/ver_ict_rel_dest_${L_CURR_PID}.txt

上面的命令输出该Windows目录中的所有文件,但是我正在查找仅搜索文件下面的文件:

anchor.jar
rename.txt
zipper.dat

请建议

2 个答案:

答案 0 :(得分:0)

在管道中插入 grep 是否可以解决问题?

echo "ls -l ${TARGET_ICT_DIR}\nquit\n" |
    sftp ${SFTP_LOGIN} |
    grep -E ' (anchor\.jar|rename\.txt|zipper.dat)\r?$' |
    tee /tmp/ver_ict_rel_dest_${L_CURR_PID}.txt

不知道是否有必要检查\ r \ n-但是...... Windows ...此外,在评论 @ghoti 中注意到\r可能无法很好地转换为所有 grep 和shell的版本。如果碰到这样的话,你可以尝试类似下面的内容:

echo "ls -l ${TARGET_ICT_DIR}\nquit\n" |
    sftp ${SFTP_LOGIN} |
    grep -E " (anchor\.jar|rename\.txt|zipper.dat)$(printf '\r')?$" |
    tee /tmp/ver_ict_rel_dest_${L_CURR_PID}.txt

ls -l | grep -E ...部分的两个变体都在Linux上使用破折号 bash 进行了测试。)

答案 1 :(得分:0)

我在下面使用了一个,它满足了我的条件

echo "ls -l {anchor.jar,rename.txt,zipper.dat} ${TARGET_ICT_DIR}\nquit\n" | sftp ${SFTP_LOGIN} | tee /tmp/ver_ict_rel_dest_${L_CURR_PID}.txt