我希望将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
连接stdout和grep
的stdin,但是当你需要连接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