使用脚本将远程 grep 的输出 scp 回我的机器

使用脚本将远程 grep 的输出 scp 回我的机器

我正在尝试编写一个脚本,该脚本将使用 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

相关内容