我用它unison
来将数据同步到服务器,最近我为此创建了一个 cronjob。该 cronjob 在启动时运行,并将输出保存到日志文件中。(更多信息见下文)。
我遇到的问题是 unison 有相当多的输出,而我只想将摘要保存到日志文件中。有办法吗?我还没有找到让 unison 更简洁的方法,所以我想也许可以以某种方式过滤输出 - 我只是不知道怎么做。
谢谢!
附加信息:
现在,日志文件最终看起来像这样:
Contacting server...
Connected [//theserver//share/HDA_DATA/elrudi -> //thelaptop//home/elrudi]
Looking for changes
\ syncAll/Code/Aptana/T...avascript library code assist.txt
\ syncAll/Code/develope...nk/20070607 contacten (INDEX).xls
\ syncAll/Code/sourcefi...okexport/photos/10152112061815397
| syncAll/Code/Python/d...rawable-hdpi/ic_action_search.png
(... many many lines ...)
| syncAll/Work/2008_10 ...profile/StandardLastprofil_H0.xls
| syncAll/Work/2008_10 ...n/Load Profiles/Lastprofil_H0.xls
Waiting for changes from server
Reconciling changes
changed ----> syncAll/scriptfile1.sh
Propagating updates
UNISON 2.40.102 started propagating changes at 12:07:31.55 on 07 Oct 2015
[BGN] Updating file syncAll/scriptfile1.sh from /home/elrudi to //theserver//share/HDA_DATA/elrudi
100% 00:00 ETA
[END] Updating file syncAll/scriptfile1.sh
100% 00:00 ETA
UNISON 2.40.102 finished propagating changes at 12:07:31.61 on 07 Oct 2015
100% 00:00 ETA
Saving synchronizer state
Synchronization complete at 12:07:36 (1 item transferred, 0 skipped, 0 failed)
我想删除以、、|
或(旋转条表示过程尚未完成)开头的行。/
-
\
更多附加信息:
crontab -e
演出
@reboot /home/elrudi/sync.sh -batch 60 >> /home/elrudi/.cronjobs.log 2>&1
该sync.sh
脚本检查服务器是否可在本地或远程访问,并运行相应的unison
命令。-batch
添加参数以使unison
运行无需用户输入,并且60
等待时间(以确保unison
在连接可用之前不会运行)。
答案1
当您调用unison
脚本时sync.sh
,请按如下方式调用:
unison ... 2>&1 | grep -vE '^[\|/-]|^$'
这将删除(-v
)与正则表达式匹配的所有行:以以下字符之一开头的所有行:\|/-
,或完整的空行(^$
)。
编辑:如果您希望过滤 cronjob,请使用:
@reboot /path/to/sync.sh -batch 60 2>&1 | grep -vE '^[\|/-]|^$' >> /path/to/logfile