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 -c
startet ein temporäres Skript ( echo 0:$0, 1:$1, 2:$2
), das die restlichen Argumente von sh
als 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.