Cron para encontrar exec cp e redirecionar a saída com hora / data por linha?

0

Eu tentei configurar uma tarefa cron para executar um conjunto de comandos básicos do shell.

Eu preciso olhar para todos os arquivos criados no último dia, depois copiar para outra pasta e gerar um log informando, linha por linha, a data e a hora da operação de cópia de arquivos.

Os dois comandos shell são executados separadamente, mas precisam criar um e agendar via cron . Quando tento aumentar o primeiro comando ( find ) cron não executa a tarefa e dá erros. Se eu corro manualmente, funciona.

find /dir/ -type f -mtime -1 -exec cp -v -a --parents "{}" /dir2/ \; >> /dir2/LogsCopiaDBs_$(date +%d-%m-%Y).txt
exec &> >(while read line; do echo "$(date +'%h %d %Hh%Mm%Ss') $line" >> /dir2/LogsCopiaDBs.txt; done;)

Alguma ideia?

    
por Edson S Freitas 13.11.2015 / 15:25

1 resposta

0

As linhas devem estar em uma ordem diferente:

exec &> >(while read line; do echo "$(date +'%h %d %Hh%Mm%Ss') $line" >> /dir2/LogsCopiaDBs.txt; done;)
find /dir/ -type f -mtime -1 -exec cp -v -a --parents "{}" /dir2/ \; >> /dir2/LogsCopiaDBs_$(date +%d-%m-%Y).txt

A linha exec substituirá STDOUT pelo comando especificado, e a linha find executará as ações de cópia e a saída para STDOUT , que será substituída pelo seu comando de registro.

Eu acho que você quer conseguir que você preencha dois arquivos de log de uma só vez. Um com a saída dos comandos de cópia, outro com a data prefixada. Para fazer isso, você pode usar o comando tee . Sem o comando tee , a saída do comando find/cp é redirecionada para outro arquivo de log e não é capturada pelo comando exec . O comando tee resolve isso:

exec &> >(while read line; do echo "$(date +'%h %d %Hh%Mm%Ss') $line" >> /tmp/LogsCopiaDBs.txt; done;)
find /tmp/ -type f -mtime -1 -exec echo cp -v -a --parents "{}" /tmp/ \; |tee -a /tmp/LogsCopiaDBs_$(date +%d-%m-%Y).txt
    
por 13.11.2015 / 15:51