Давайте немного переделаем перенаправления и добавим некоторые разрывы строк, чтобы увидеть, что вы на самом деле выполняете:
>> /home/things/logs/backup.log \
>> /home/things/logs/backup.log \
find /home/things/backups -mtime +0 -exec echo "{}" \; \
-exec echo "Hourly rotate successful: $(date). {} was deleted.";
\;
Вы перенаправляете вывод find, а не вывод команд по -exec. Это повлияет на команды, выполняемые с помощью -exec, поскольку они являются дочерними процессами и наследуют дескрипторы открытых файлов, поэтому эффект будет тем, что вам нужно, даже если способ, которым вы обходился, был странным. Тогда ; в конце второго exec не сбежал. Команда find была завершена там без ; для exec, вызывая ошибку. find немедленно ушел из-за этого, поэтому никакого выхода не было. Затем \; в конце обрабатывается оболочкой. Обычно это будет разделитель инструкций, но поскольку он экранирован, он пытается запустить его как команду. Это, естественно, не получается. Рассмотрим упрощение команды:
find /home/things/backups -mtime +0 -exec \
bash -c 'printf "%s\nHourly rotate successful: $(date). %s was deleted.\n" "$0" "$0"' {} \; \
>> /home/things/logs/backup.log