【问题标题】:How to create remote tar (bash)如何创建远程 tar (bash)
【发布时间】:2014-01-19 02:19:20
【问题描述】:

我的脚本正在执行以下行:

ssh $REMOTE_USER@${SUPPORTED_SERVERS[$i]} "gtar -zcvf $TAR_FILE `find $LOCAL_PATH -name *$DATE*`

现在,问题是 find 命令正在本地机器上执行,我需要它在远程机器上执行。

请帮忙, 谢谢

【问题讨论】:

    标签: bash tar remote-execution


    【解决方案1】:

    使用 $() 而不是反引号 ` 并另外使用反斜杠对其进行转义以避免在本地计算机上执行命令:

    ssh $REMOTE_USER@${SUPPORTED_SERVERS[$i]} "gtar -zcvf $TAR_FILE \$(find $LOCAL_PATH -name *$DATE*)"
    

    【讨论】:

      【解决方案2】:

      制作一个脚本,将其复制到服务器并运行它。这么简单的事情现在可能看起来毫无意义,但你以后可能会感谢我的。

      【讨论】:

      • 试过了。结果是一样的
      • 我想你当时不明白我的意思。我的意思是 ` 应该在脚本中,这样你就不会遇到这个问题。
      • 我的意思是脚本不应该在其中包含 SSH。因此,您将脚本复制到服务器并使用 SSH 运行它。
      • 谢谢,但我不喜欢这样的方法...答案 #1 对我来说很好
      【解决方案3】:

      通过 SSH 执行命令时,您需要转义不应在本地计算的任何特殊字符。转义反引号以在远程服务器上评估它们:

      ssh $REMOTE_USER@${SUPPORTED_SERVERS[$i]} "gtar -zcvf $TAR_FILE \`find $LOCAL_PATH -name *$DATE*\`
      

      假设$TAR_FILE$LOCAL_PATH$DATE 是局部变量,否则也将它们转义。 (它们需要作为环境变量存在于远程服务器上)

      替代方案

      就像@RobinGreen 指出的那样:在远程服务器上创建一个脚本并通过 SSH 执行它通常会更好。

      #!/bin/sh
      # This is the remote script
      # Use positional arguments $1 - $3 and make a tarball
      gtar -zcvf $1 $(find $2) -name "*$3*"
      

      这样称呼

      ssh $REMOTE_USER@${SUPPORTED_SERVERS[$i]} "/path/to/remote/script $TAR_FILE $LOCAL_PATH $DATE"
      

      【讨论】:

        猜你喜欢
        • 2013-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多