Wie filtere ich ein Exec-Log mit grep?

0

Ich führe mit Rclone ein Skript aus, das Dateien von meiner Festplatte auf Google Drive verschiebt. Es sieht folgendermaßen aus:

#!/bin/bash
exec 1>> /home/user/MoveLog.txt
exec 2>&1
rclone move localfolder remotefolder:

Okay. Daher zeigt rclone während der Ausführung viele Terminalaktivitäten, wodurch das Protokoll ziemlich groß wird.

Ich möchte diese Ausgabe in dem erstellten Protokoll filtern.

Ich wollte ein Protokoll haben, das wie die Ausgabe von aussieht:

cat MoveLog.txt | grep Copied

Da dieser Befehl nur die wichtigeren Teile des Protokolls zurückgibt.

Wie kann ich dies im ersten Skript implementieren, sodass nur die Zeilen protokolliert werden, in denen der Text "Kopiert" enthalten ist? Vielen Dank.

Chembs
quelle

Antworten:

0

Anscheinend möchten Sie die Ausgabe von stdout und stderr filtern und an die Protokolldatei anhängen:

rclone move localfolder remotefolder &> /dev/stdout | grep Copied >> /home/user/MoveLog.txt

sollte tun, was du willst. Ich denke, der Doppelpunkt, den Sie in Ihrem rclone-Befehl verwenden, gehört nicht dorthin, also habe ich ihn weggelassen, aber ich könnte in diesem Punkt falsch liegen.

mook765
quelle
3

Das scheint zu komplex, wie wäre es

#!/bin/bash
rclone move localfolder remotefolder: |& \
    tee -a "$HOME/MoveLogEntire.txt" | \
    grep "Copied" >> "$HOME/MoveLog.txt"

Ich empfehle, das gesamte Protokoll zur Diagnose zu speichern, wenn $HOME/MoveLog.txtes leer ist.

Ich habe meinen Code geändert, um ( tee -a, >>) an die Protokolle anzuhängen . Ich habe gelernt, mich vor ständig wachsenden Dateien zu fürchten (die den verfügbaren Speicherplatz nicht überwachen), daher muss ich diese Lösung nicht empfehlen.

Waltinator
quelle
2

Wenn Sie die vorhandene Struktur / den vorhandenen Stil des Skripts beibehalten möchten, können Sie so etwas tun

#!/bin/bash

exec 1> >(tee -a $HOME/MoveLog.txt | grep 'Copied' >> $HOME/CopiedLog.txt)
exec 2>&1

Dies leitet stdout(Dateideskriptor Nr. 1) zu einer Prozessersetzung weiter , bei der wir sie zuerst an die primäre Protokolldatei anhängen $HOME/MoveLog.txt, dann den teed-Stream mit grep filtern und an ein sekundäres Protokoll anhängen$HOME/CopiedLog.txt

Da dies ein Bash-Skript ist, können Sie das erste 1>durch ersetzen &>und die separate exec 2>&1Umleitung weglassen .

Stahlfahrer
quelle