我运行一个脚本,使用 Rclone 将文件从我的 HDD 移动到 Google Drive,如下所示:
#!/bin/bash
exec 1>> /home/user/MoveLog.txt
exec 2>&1
rclone move localfolder remotefolder:
好的。所以 rclone 在运行时会显示大量终端活动,从而使日志变得相当大。
我想要做的是在创建的日志中过滤这个输出。
我想要一个看起来像输出的日志:
cat MoveLog.txt | grep Copied
因为此命令仅返回日志中比较重要的部分。
我如何在第一个脚本上实现这一点,使其仅记录其中包含文本“Copied”的行?谢谢。
答案1
这似乎太复杂了,怎么样
#!/bin/bash
rclone move localfolder remotefolder: |& \
tee -a "$HOME/MoveLogEntire.txt" | \
grep "Copied" >> "$HOME/MoveLog.txt"
我建议在日志为空时保存整个日志以供诊断$HOME/MoveLog.txt
。
我已将代码更改为将 ( tee -a
, >>
) 附加到日志中。我已经学会了担心不断增长的文件(不监控可用空间),所以我必须不推荐这种解决方案。
答案2
如果你想保留脚本的现有结构/样式,你可以这样做
#!/bin/bash
exec 1> >(tee -a $HOME/MoveLog.txt | grep 'Copied' >> $HOME/CopiedLog.txt)
exec 2>&1
这将stdout
文件描述符 #1 重定向到流程替代,我们首先将其附加到主日志文件$HOME/MoveLog.txt
,然后使用tee
grep 过滤 d 流并将其附加到辅助日志$HOME/CopiedLog.txt
因为这是一个 bash 脚本,所以您可以替换第一个1>
并&>
省略单独的exec 2>&1
重定向。
答案3
似乎您想要过滤 stdout 和 stderr 的输出并将其附加到日志文件:
rclone move localfolder remotefolder &> /dev/stdout | grep Copied >> /home/user/MoveLog.txt
应该可以做你想做的事。我认为你在 -command 中使用的冒号rclone
不应该出现在那里,所以我把它省略了,但这一点我可能错了。