通过SSH传输文件,然后附加到另一个文件

时间:2013-01-30 21:46:20

标签: ssh scp

我正在尝试自动化一个脚本,该脚本将文件从我的本地服务器复制到命令行上的远程服务器。我已经完成了对scp的研究并知道如何将文件复制到远程服务器,但后来我想将该文件附加到另一个文件。

这是我的代码:

scp ~/file.txt user@host:
ssh user@host cat file.txt >> other_file.txt

当我手动将所有内容输入命令行时,一切正常:

scp ~/file.txt user@host:
ssh user@host
cat file.txt >> other_file.txt

但是当我运行脚本时,只复制文件,而不是附加到other_file.txt的末尾。帮助

3 个答案:

答案 0 :(得分:1)

代码的第二行应该是

ssh user@host "cat file.txt >> other_file.txt"

三个要点:

  1. 您不希望本地 shell以任何方式解释>>(如果它没有引用,它会执行此操作)
  2. 一个远程shell,它将正确解释命令中的>>
  3. ssh的最终参数被“加入”以形成一个命令,而不是像argv数组一样被加载到ssh cat "$MYFILE"数组中。这可能很方便,但也可能导致混淆或错误:ssh "cat '$MYFILE'"$MYFILE两个工作在一个常见的用例中,但他们中断 {{1}}的值。

答案 1 :(得分:1)

您需要将要在远程主机上运行的命令括在引号中。否则,重定向是在本地完成而不是远程完成。试试这个:

scp ~/file.txt user@host:
ssh user@host 'cat file.txt >> other_file.txt'

答案 2 :(得分:0)

试试这个:

  $ cat file.txt| ssh hostname 'cat >> other_file.txt'