重定向匹配pattern的scp输出



我希望将scp的输出重定向到文件中,但只希望匹配模式的行。例如,我得到很多权限拒绝错误,所以我想记录所有出现这种情况的文件。我发现我可以将scp的所有输出重定向到这样的文件中:

source my_scp_script.sh > output.log 2>&1

脚本只是对scp的一个简单调用。我被困在如何匹配"拒绝许可"这样的模式上了。并且只将这些行写入文件,而不是所有行,因为有成千上万的文件是成功的。

编辑:我忘了澄清,我已经尝试使用grep,但它不工作时这样做source my_scp_script.sh | grep Permission > output.log

scp没有什么特别的;您只需要熟悉shell I/O重定向。(Linux文档项目的高级Bash-Scripting指南是一个很好的信息资源;§20 I/O重定向包含一个很好的总结。)


您可以使用source my_scp_script.sh 1> /tmp/stdout 2> /tmp/stderr将写入的输出重定向到文件描述符1(也称为stdout;注意,1>也可以写为>(更常用)和2(又名stderr)到临时文件。然后,您可以检查/tmp/std{out,err},并将发现Permission Denied错误被写入stderr。一个简单的管道| grep连接stdoutgrepstdin,但是当你需要连接stderr时,你可以使用

source my_scp_script.sh 2>&1 | grep "Permission Denied" > output.log

将文件描述符2重定向到文件描述符1,然后将组合的stdout管道输出到grep

使用|&作为2>&1 |的快捷方式,您最终可以将其简化为:

source my_scp_script.sh |& grep "Permission Denied" > output.log

相关内容

  • 没有找到相关文章

最新更新