Alguien proporcionó este script para la rotación de registros. Quiero saber cuál es la lógica detrás de esto. Aunque entiendo todo excepto --exec, lo cual fue un poco confuso para mí.
Guión 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"`"' {} \;
Creo que falta la variable 'echo $'.
El mismo script que implementé de forma diferente (solo con fines de prueba) se ejecutó con éxito.
#!/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 {} \;
Mi tarea es rotar el registro y comprimirlo.
Respuesta1
Intentar:
sh -c 'echo 0:$0, 1:$1, 2:$2' one two three
esto produce:
0:one, 1:two, 2:three
En otras palabras, sh -c
lanza un script temporal ( echo 0:$0, 1:$1, 2:$2
) que recibe el resto de los argumentos de sh
como propios. Normalmente se supone que el primero de estos argumentos es el nombre de un comando (pero esto es una convención).
Entonces en tu guión:
-exec sh -c 'mv "$0" "/home/cloud360mssread/$0-`date +"%d-%m-%Y"`"' {} \;
está ejecutando:
mv {the_file} /home/cloud360mssread/{the_file}-{timestamp}
lo cual es un poco artificial ya que:
-exec mv "{}" "/home/cloud360mssread/{}-$(date +"%d-%m-%Y")" \;
hubiera funcionado igual de bien.