【问题标题】:Using ssh remote plus grep使用 ssh 远程加 grep
【发布时间】:2012-06-18 16:08:22
【问题描述】:

我正在运行一个类似上面的 shell 脚本:

vQtde=`ssh  user@server 'ls -lrt /mnta2/gvt/Interfaces/output/BI/sent/*.?${vDiaAnterior}* | grep "${vMDAtual}0[345678]:" |wc -l'`

返回错误:ksh: /usr/bin/sh: arg list too long

我知道本地服务器中的相同脚本返回 9,我如何在远程 grep 中转义“”?

变量是:

vDiaAtual=`date +%d`
vMesAtual=`date +%b`
vMDAtual=" $vMesAtual $vDiaAtual ";
vDiaAnterior=120614

【问题讨论】:

  • @IgorChubin 是对的。 +1 用于发布您的错误消息,但您必须阅读错误消息!它告诉你什么是错的。祝你好运。

标签: shell ssh arguments


【解决方案1】:

我通过以下方式解决了问题: - 在接收参数的本地服务器中创建文件.sh:

#!/usr/local/bin/bash

vDiaAnterior="${1}"; vMDAtual="${2}";

ls -l /mnta2/gvt/Interfaces/output/BI/sent/*.?${vDiaAnterior}AMA | grep "${vMDAtual}[345678]:" | wc -l;

  • 远程呼叫:

    ssh user@server "./mnta1/prod_med1/scriptsf/ver_jobs_3_horas.sh $vDiaAnterior '$vMDAtual'"

结果:9 个文件。

最好的问候, 考卡

【讨论】:

    【解决方案2】:

    基于information regarding that error message,我不确定转义引号是否是这里的真正问题。

    你最终想要做什么?可能有一种稍微不同的方法可以避免这个问题。您似乎正在尝试计算具有某个“最后修改”日期的文件数。这是准确的吗?如果是这样,我强烈建议反对使用ls 的输出来做到这一点。平台之间的输出不一致,甚至可以在版本之间更改。 find 实用程序更适合这类事情。

    试试这样的:

    dir=/mnta2/gvt/Interfaces/output/BI/sent/
    pattern="*.?${vDiaAnterior}*"
    time= # Fill this in based on the "last modified" time that you're looking for
    
    find $dir -iname "$pattern" -mtime $time -exec printf '.' \; | wc -c
    

    您可以省略使用额外的变量,它们只是为了使网页上的代码更具可读性。

    这将在给定目录中搜​​索名称与指定通配符模式匹配且“最后修改”时间与您指定的任何文件匹配的所有文件。对于找到的每个匹配项,将运行代码 printf '.'(将一个点打印到标准输出)。 wc 然后计算点字符的数量,这将等于找到的匹配文件的数量。这种方法的好处是它最大限度地减少了程序之间需要传输的数据量(包括 shell 和ls 之间)。 find 在内部处理通配符匹配,而不是要求 shell 扩展通配符并将结果传递给 ls。您还只需将每个匹配文件的一个字符发送到wc,而不是每次匹配的一长行ls 输出。这应该会减少您遇到“arg list too long”错误的机会。

    【讨论】:

      【解决方案3】:

      这里的问题不在于 grep。问题如下:参数/mnta2/gvt/Interfaces/output/BI/sent/*.?${vDiaAnterior}*被shell扩展(在这种情况下是ksh),结果列表太大。

      最好简单地做ls -lrt /mnta2/gvt/Interfaces/output/BI/sent/,然后在其后添加额外的grep

      类似:

      ls -lrt /mnta2/gvt/Interfaces/output/BI/sent/ | grep "\..${vDiaAnterior}" | grep ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-29
        • 2015-01-23
        相关资源
        最近更新 更多