Vamos reposicionar um pouco os redirecionamentos e adicionar algumas quebras de linha para ver o que você está realmente executando:
>> /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.";
\;
-
Você está redirecionando a saída de find
, não a dos comandos executados por -exec
. Isso afetaria os comandos executados usando -exec
, já que eles são processos filhos e herdam descritores de arquivos abertos, portanto, o efeito seria o que você precisava, mesmo que a maneira como você fazia isso fosse estranha.
-
Em seguida, o ;
no final do segundo exec
não foi ignorado. O comando find
foi encerrado lá sem um ;
para exec
, causando o erro. find
saiu imediatamente por causa disso, então nenhuma saída foi produzida.
-
O \;
no final é então processado pelo shell. Normalmente, seria um delimitador de instrução, mas como é escapado, ele tenta executá-lo como um comando. Isso falha, naturalmente.
Considere simplificar o comando:
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