Jemand gab dieses Skript zur Protokollrotation. Ich möchte wissen, was dahintersteckt. Ich verstehe zwar alles außer --exec, was für mich wenig verwirrend war.
Original-Skript:
#!/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, 'echo $' fehlt die Variable.
Das gleiche Skript, das ich auf unterschiedliche Art und Weise (nur zu Testzwecken) implementierte, 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 ist es, das Protokoll zu drehen und zu komprimieren.
--exec
?logrotate
), warum also das Rad neu erfinden?Antworten:
Versuchen:
Dies ergibt:
Mit anderen Worten,
sh -c
Startet ein temporäres Skript (echo 0:$0, 1:$1, 2:$2
) das die restlichen Argumente vonsh
als seine eigenen args. Normalerweise wird davon ausgegangen, dass der erste dieser Befehle ein Befehlsname ist (dies ist jedoch eine Konvention).Also in deinem Skript:
führt aus:
was ist ein bisschen erfunden seit:
hätte genauso gut funktioniert.
quelle
backupmysqld.tar' is not a directory mv: target
backuptar.tar 'ist kein Verzeichnis mv: targetyumlog.tar' is not a directory mv: target
yumlogtest.tar 'ist kein Verzeichnis ****