Ich habe einen Befehl für die obige Frage. Kann mir bitte jemand den folgenden Befehl erklären?
DATE=`date +%m%d%Y-%H%M%S` ; for i in `ls -lt *.log* | grep "Oct 11" | grep -E '12:|13:|14:' | awk '{print $9}'`; do zip logs_`hostname`_${DATE}.zip $i; done
Antwort1
Das Skript, auf das Sie sich beziehen, ist überhaupt nicht gut geschrieben und funktioniert möglicherweise nicht wie erwartet.
Hier ist eine Aufschlüsselung seiner Funktionsweise:
DATUM=
date +%m%d%Y-%H%M%S
Speichern Sie das aktuelle Datum in DATE in einem Format wie „10192016-171249“. Weitere Informationen finden Sie unter „man date“. Dies ist übrigens nicht die beste Möglichkeit, ein Datum/eine Uhrzeit zu speichern. Aus Gründen der schnellen Referenz/Sortierung ist die Verwendung des Formats JJJJMMTT für den Datumsteil viel besser.
ls -lt *.log*
Dadurch wird eine Verzeichnisliste aller Dateien im aktuellen Verzeichnis erstellt, die dem Muster „*.log*“ entsprechen. Das könnte beispielsweise so aussehen:
-rw-r--r-- 1 root root 174106 Sep 30 17:28 dpkg.log.1
-rw-r--r-- 1 root root 1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm 272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm 272254 Oct 11 17:14 kernXX.log.1.gz
-rw-r----- 1 root adm 414 Sep 29 18:09 user.log.4.gz
-rw-r--r-- 1 root root 209 Sep 26 14:18 chipsee_clone.log
-rw-r--r-- 1 root root 1333 Apr 9 2015 pm-powersave.log.1
grep "11. Oktober"
Anschließend werden nur die Zeilen „extrahiert“, in denen „Oct 11“ vorkommt. Das ergibt:
-rw-r--r-- 1 root root 1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm 272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm 272254 Oct 11 17:14 kernXX.log.1.gz
grep -E '12:|13:|14:
Dann werden erneut nur diejenigen extrahiert, bei denen „12:“ oder „13:“ oder „14“ vorhanden ist: (auch hier sehr schlecht gemacht, da dies nicht nur auf das Stundenfeld, sondern auch auf die Minuten- und Sekundenfelder zutrifft)
-rw-r--r-- 1 root root 1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm 272254 Oct 11 17:14 kernXX.log.1.gz
awk '{drucken $9}'
Aus den verbleibenden Zeilen wird das 9. Element (der Dateiname) extrahiert:
fontconfig.log
Zip-Protokolle_
hostname
_${DATE}.zip $i
Mithilfe einer „for“-Schleife um den obigen Befehl wird jede dieser Dateien dann zu einer ZIP-Datei mit dem Namen hinzugefügt:
logs_`hostname`_${DATE}.zip
wobei hostname
der Name Ihres Hosts und „${DATE}“ das zuvor gespeicherte DATUM ist. Wenn Ihr Hostname also BLUERAY ist und Sie das oben angegebene DATUM verwenden, erhalten Sie eine Datei mit dem Namen:
logs_BLUERAY_10192016-171249.zip
Auch dieses Skript ist sehr schlecht geschrieben und Sie sollten es (oder ein anderes desselben Autors) auf keinen Fall verwenden, um das Schreiben von Skripten zu erlernen ...