Wie schreibt man den Befehl -exec in einem anderen Format?

0

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.

user3511282
quelle
Wo ist der, die, das --exec ?
harrymc
1
Ich bin nicht sicher, was genau Ihre Frage ist. Wofür benötigen Sie speziell Hilfe oder was ist das Problem?
slhck
Es gibt viele Dienstprogramme, um die Protokolle unter Linux zu rotieren (einschließlich der treffend benannten) logrotate ), warum also das Rad neu erfinden?
xenoid

Antworten:

0

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 args. Normalerweise wird davon ausgegangen, dass der erste dieser Befehle ein Befehlsname ist (dies ist jedoch eine Konvention).

Also in deinem 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 ist ein bisschen erfunden seit:

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

hätte genauso gut funktioniert.

xenoid
quelle
Es klärt meinen Zweifel. Beim Ausführen des Skripts wird jedoch ein Fehler bezüglich des Befehls 'mv' angezeigt. Ich habe die andere Option des mv-Befehls ausprobiert. **** ++ find backupmysqld.tar backuptar.tar yumlog.tar yumlogtest.tar -exec mv '{}' '/ home / vinod / {} - 06-08-18' '{}'; mv: Ziel backupmysqld.tar' is not a directory mv: target backuptar.tar 'ist kein Verzeichnis mv: target yumlog.tar' is not a directory mv: target yumlogtest.tar 'ist kein Verzeichnis ****
user3511282
Entschuldigung, das Falsche wurde kopiert / eingefügt. Befehl behoben
xenoid