Originalskript:

Originalskript:

Jemand hat dieses Skript für die Protokollrotation erstellt. Ich möchte wissen, welche Logik dahinter steckt. Allerdings verstehe ich alles außer --exec, was für mich etwas verwirrend war.

Originalskript:

#!/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"`"' {} \;

Ich denke, die Variable „echo $“ fehlt.

Ich habe dasselbe Skript auf eine andere Weise implementiert (nur zu Testzwecken) und es wurde erfolgreich ausgeführt.

#!/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 {} \;

Meine Aufgabe besteht darin, den Stamm zu drehen und zu komprimieren.

Antwort1

Versuchen:

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

Dies ergibt:

0:one, 1:two, 2:three

Mit anderen Worten, sh -cstartet ein temporäres Skript ( echo 0:$0, 1:$1, 2:$2), das die restlichen Argumente von shals seine eigenen Argumente erhält. Normalerweise wird davon ausgegangen, dass das erste dieser Argumente ein Befehlsname ist (das ist jedoch eine Konvention).

Also in Ihrem Skript:

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

führt aus:

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

was ein bisschen konstruiert ist, da:

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

hätte genauso gut funktioniert.

verwandte Informationen