Argumento ausente para -exec

1

Este é o comando que estou inserindo.

find /home/things/backups -mtime +0 -exec echo "{}" >> /home/things/logs/backup.log \; -exec echo "Hourly rotate successful: $(date). {} was deleted." >> /home/things/logs/backup.log; \;

e a saída está abaixo.

find: missing argument to '-exec'

;: command not found

Ele cria o arquivo backup.log bem, mas o arquivo está vazio.

    
por jackalas2605 01.07.2015 / 21:07

2 respostas

0

Usando:

find /home/things/backups -mtime +0 -exec \
    sh -c 'echo "$0" >> /home/things/logs/backup.log; echo "Hourly rotate successful: $(date). $0 was deleted." >> /home/things/logs/backup.log;' {} \;

Iniciamos um novo shell sh com um comando -c e o parâmetro {} (o resultado find ). No comando, usamos esse parâmetro via $0 .

    
por A.B. 01.07.2015 / 21:13
1

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
    
por muru 01.07.2015 / 21:20