【问题标题】:scp: how to copy a file from remote server with a filterscp:如何使用过滤器从远程服务器复制文件
【发布时间】:2016-04-19 18:13:28
【问题描述】:

我正在尝试使用 scp 从远程服务器复制大型日志文件。但是,我只想要远程日志文件中具有字符串“失败”的行。 这就是我目前的做法

scp user@ip:remote_folder/logfile* /localfolder

这会将远程服务器中以 logfile 开头的所有文件复制到我的本地文件夹。这些文件非常大,我只需要复制这些日志文件中的行,其中包含来自远程服务器的字符串“Fail”。任何机构都可以告诉我该怎么做吗?我可以使用 cat 或 grep 命令吗?

【问题讨论】:

  • 一个小提示:如果你正在传输文本文件,那么使用-C 标志到ssh/scp 来启用压缩可以使事情大大更快连接速度慢...

标签: linux shell scp


【解决方案1】:

在远程机器上使用grep,并将输出过滤成文件名和内容:

#!/usr/bin/env bash

BASEDIR=~/temp/log

IFS=$'\n'
for match in `ssh user@ip grep -r Fail "remote_folder/logfile*"`
do
    IFS=: read file line <<< $match
    mkdir -p `dirname $BASEDIR/$file`
    echo $line >> $BASEDIR/$file
done

你可能想看看IFS in combination with read的解释。

【讨论】:

    【解决方案2】:

    ssh user@ip grep Fail remote_folder/logfile*

    【讨论】:

    • 您可能需要引用文件名参数,因为如果您启用了 globbing,您的 shell 将在本地扩展它,并且它匹配本地文件列表(或者您在 shell 中启用了 nullglob )。
    猜你喜欢
    • 2020-02-25
    • 2012-02-17
    • 2019-11-07
    • 2010-09-09
    • 2011-12-11
    • 2014-11-18
    • 2013-08-13
    • 2018-09-04
    • 2012-01-05
    相关资源
    最近更新 更多