使用 sftp 从 linux 机器列出远程 windows 机器上的特定文件

List specific files on a remote windows machine from a linux machine using 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

请推荐

在管道中插入 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 -- 但是...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 ... 部分的两个变体都使用 dashbash[=26= 进行了测试] 在 Linux.)

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

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