Зависит от того, как настроен ваш crontab -для запуска фактической задачи или вызова сценария оболочки, который затем запускает вашу фактическую задачу.
В любом случае, если будет сгенерирован какой-либо вывод (stdout или stderr ), он будет отправлен по электронной почте. Единственный способ обойти это — перенаправить вывод в /dev/null или в файл журнала. Вы можете прочитать о перенаправлении ввода-вывода
.
ТРФ:
$ grep -Pom1 'Transferred:.*/ \K[^,]*' "$logfile"
577.080 MBytes
-P
включить perl -совместимые регулярные выражения и \K
не включать элементы до \K
в согласованный вывод -o
выводить только совпадающие части строки -m1
выйти после первой совпадающей строки, чтобы исключить вторую Transferred:
строку ТРС:
$ grep -Po 'Transferred:[^,]*,[^,]*, \K[^,]*' "$logfile"
12.660 MBytes/s
-m1
не нужно, так как шаблон содержит более одной запятой ОШИБКА:
$ grep -Po 'Errors:[[:space:]]*\K.*' "$logfile"
0
ТИМ:
$ grep -Po 'Elapsed time:[[:space:]]*\K.*' "$logfile"
45.5s
Количество переданных файлов:(это первое из двух чисел)
$ grep -Po 'Transferred:[[:space:]]*\K[0-9]+(?= /)' "$logfile"
2
(?= /)
— это положительный прогноз (PCRE ), где мы ищем пробел и /
. Эта часть, как и \K
, не включается в совпадающий вывод и необходима, чтобы не совпадать с первой строкой Transferred
.Этот подход создает всю строку вывода только с одним процессом. Следовательно, это должно быть намного быстрее, чем использование серии grep и cut. Кроме того, awk довольно мощный (, он выполняет математические операции с плавающей запятой, например ), что может быть полезно, если вы позже внесете улучшения в вывод.
Попробуйте:
$ awk '/ETA/{mb=$2; speed=$7" "$8} /Errors/{err=$2} /Transferred/{n=$2} /Elapsed/{printf "Transferred %s, %s files with %s errors in %s @ %s\n",mb,n,err,$3,speed}' rclone.log
Transferred 577.080M, 2 files with 0 errors in 45.5s @ 12.660 MBytes/s,
/ETA/{mb=$2; speed=$7" "$8}
Если текущая строка содержит ETA (, что означает, что это первая строка Transferred
, сохраните второе поле в mb
и седьмое и восьмое поля в speed
.
/Errors/{err=$2}
Если эта строка содержит Errors
, то сохраните второе поле в err
.
/Transferred/{n=$2}
Если эта строка содержит Transferred
, сохраните второе поле в переменной n
.
/Elapsed/{printf "Transferred %s, %s files with %s errors in %s @ %s\n",mb,n,err,$3,speed}'
Наконец, когда мы достигнем строки, содержащей Elapsed
, распечатайте наше сообщение.
Для тех, кто предпочитает, чтобы их код располагался на нескольких строках:
awk '
/ETA/{
mb=$2
speed=$7" "$8
}
/Errors/{
err=$2
}
/Transferred/{
n=$2
}
/Elapsed/{
printf "Transferred %s, %s files with %s errors in %s @ %s\n",mb,n,err,$3,speed
}' rclone.log