
Я использую 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