【问题标题】:List specific files on a remote windows machine from a linux machine using sftp使用 sftp 从 linux 机器列出远程 windows 机器上的特定文件
【发布时间】:2018-04-05 23:41:45
【问题描述】:

在从 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

请推荐

【问题讨论】:

  • 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

标签: shell awk sed grep sftp


【解决方案1】:

在管道中插入 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 和外壳。如果遇到这种情况,可以尝试以下方法:

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 上使用 dash 和 bash 进行了测试。)

【讨论】:

  • 可能希望将其切换为 egrep。来自man re_format:过时的(''basic'')正则表达式在几个方面有所不同。 '|'是一个普通字符,它的功能没有等价物。在grep 中转义的使用它的选项是我认为可能无法在其他平台上移植到grep 的GNUism。
  • grep 使用等同于扩展的标准正则表达式。但是,你是对的,这看起来有点反斜杠快乐。我将添加 egrep 作为选项...
  • 其实grep默认使用BRE表示法;这就是拥有egrep 的全部意义所在。检查您的手册页。如果您使用的是 Linux 系统,请参阅-G 选项的说明。 “这是默认设置。”但不要假设每个人都在运行 Linux 或使用 GNU grep。虽然问题可能在其主题中提到了 Linux,但答案的部分价值在于其可移植性。如果您的答案取决于工具的特定版本(就像您的工具一样),最好在答案本身中提及该限制。
  • 注意——我将使用 grep -E 来明确。
  • 太棒了。只剩下一个问题,那就是\r。格式字符不是 BRE 或 ERE 的一部分。如果你的 shell 是 bash,你可能能够摆脱格式替换,即$' (..|..|..)\r?$',但这个符号不是 POSIX 正则表达式的一部分。比较 printf 'one\r\ntwo\n' | grep -E '\r' | od -c 和 printf 'one\r\ntwo\n' | grep -E $'\r' | od -c。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多