Como escrever o comando -exec com formato diferente

0

Alguém deu esse script para a rotação de log. Eu quero saber o que é lógica por trás disso. Embora eu entenda tudo, exceto --exec que foi um pouco confuso para mim.

Script original:

#!/bin/bash

set -x
NOW=$(date +"%m-%d-%Y")
echo $
cd /home/cloud360mssadmin/
find Tahoe-Broadcast.log.*  -exec sh -c 'mv "$0" "/home/cloud360mssread/$0-'date +"%d-%m-%Y"'"' {} \;

Eu acho que a variável 'echo $' está faltando.

O mesmo script que eu implementei de maneira diferente (somente para propósito de teste) que foi executado com sucesso.

#!/bin/bash
# this is scrpt for the log rotation
set -x
cd /var/log
echo " we are enter the 'pwd'"
NOW="$(date +'%d-%m-%y')"
echo $NOW
find vmware* -exec mv '{}'  /home/vinod/ \;
cd /home/vinod/
find vmware* -exec tar -rvf vmware.tar {} \;

Minha tarefa é girar o log e compactá-lo.

    
por user3511282 05.08.2018 / 20:35

1 resposta

0

Tente:

sh -c 'echo 0:$0, 1:$1, 2:$2' one two three

isso produz:

0:one, 1:two, 2:three

Em outras palavras, sh -c lança um script temporário ( echo 0:$0, 1:$1, 2:$2 ) que recebe o restante dos argumentos de sh como seus próprios argumentos. Normalmente, o primeiro desses argumentos é considerado um nome de comando (mas isso é uma convenção).

Então, no seu script:

-exec sh -c 'mv "$0" "/home/cloud360mssread/$0-'date +"%d-%m-%Y"'"' {} \;

está sendo executado:

mv {the_file} /home/cloud360mssread/{the_file}-{timestamp}

que é um pouco inventado desde:

-exec mv "{}" "/home/cloud360mssread/{}-$(date +"%d-%m-%Y")" \;

teria funcionado tão bem.

    
por 05.08.2018 / 23:28