我正在尝试编写一个脚本,该脚本将使用 ssh 会话对一个巨大的日志文件执行 grep,将输出 cat 到一个临时文件,然后将临时文件 scp 回客户端机器:
ssh user@server grep pattern logfile.log | cat > temp.txt
scp user@server:/temp.txt .
在脚本中编写此类操作的最佳方法是什么?
答案1
您只需一步即可完成此操作:
ssh user@server "grep pattern logfile.log" > temp.txt
这ssh
将对远程主机发出命令,grep pattern logfile.log
并将整个命令的输出重定向ssh
到您的当地的文件temp.txt
。
在这种情况下,引用非常重要,也就是说,引用的位置至关重要"
。例如
ssh user@server "grep pattern logfile.log > temp.txt"
会将输出写入偏僻的主机(不是您想要的),因为它会"grep pattern logfile.log > temp.txt"
在该主机上运行完整命令。但在第一种情况下,只有命令在远程运行,并且重定向发生在您的本地主机上。
答案2
首先,您不需要将命令通过管道传输到cat
,只需将其重定向:
grep pattern logfile > mylog.log
而且temp.txt
将在您的机器上而不是服务器上创建,要在服务器上创建它,您必须引用以下命令:
ssh user@server "grep pattern logfile | whatever > temp.log"
我会选择:
ssh user@server grep pattern logfile.txt > mylog.log
它会在我的计算机grep pattern
上运行logfile.txt
然后创建。mylog.log