Ich habe einige Unterordner (A, B, C, D ..) auf einem Remote-Server, der ungefähr 100.gz-Dateien enthält. Das Benennungsmuster für Dateien ist wie folgt: ND2_58_20151105173030_20151105173240_1234.log.gz Dabei ist das dritte und vierte Feld nach _ die Start- und Endzeit. Wenn nun die Start- / Endzeit 15 Minuten von der aktuellen Zeit entfernt ist, möchte ich diese Datei abrufen. Kann mir jemand vorschlagen, wie ich es mit Shell-Skript mache. Zum Abrufen von Daten verwende ich rsync.
Danke, Arn
awk
besserprint $3,$4, $0
so , wenn Sie analysieren werden Sie den vollständigen Namen in der zweiten Spalte bereit haben. Sie brauchen$4
auch, wenn es vor langer Zeit begann und erst vor wenigen Minuten endete ...basename
) in einer Variablen, zum Beispielfname
mita=${fname#*_*_}
Ihnen wählen20151105173030_20151105173240_1234.log.gz
mitb=${a%_*_*}
Ihnen verkleinern20151105173030
mityear=${b:0:4}
Sie haben2015
und so weiter ... Natürlich können Sie mehr gemütliche Art und Weise ... finden Bash String - ManipulationAntworten:
Mit den Optionen
--include
und--exclude
könnenrsync
Sie nur die gewünschten Dateien auswählen. Wenn ich Ihre Frage richtig verstehe, möchten Sie die Dateien, deren Name das aktuelle Datum / die aktuelle Uhrzeit plus oder minus 15 Minuten enthält. Ich bin mir nicht sicher, ob Sie genau 15 Minuten brauchen , aber hier ist ein kleines Skript, das dies tun kann:Sollte für genau 15 Minuten leicht zu ändern sein .
quelle
*
zuinclude
undexclude
Optionen , wie in meiner Antwort.p='--include="*_'$(date +$format --date "+ $delta minutes")'*_*.sig.gz"'
und--exclude='*'
ich weiß es auch nicht$Et
, aber es sollte eine datei mit einer liste von ausschlussmustern sein.Wenn Sie den Daten aus dem Dateisystem vertrauen können, können Sie
find
undrsync
zusammen.oder mit einer umgekehrten Logik und nur einem
rsync
ProzessReferenz
Sie können einen Blick auf diese [Antworten] [ 1 , 2 , 3 ] werfen , zum Beispiel ...
quelle
rsync -n
einem einfachen, oder besserssh ls /my/src_path
, die Ausgabe zu analysieren, sed , wosed 's/_/ /g'
erforderlich, erstellen Sie eine Liste, Filter (vielleicht awk oder Bash String - Ersetzung) und ein zweites Mal laufenrsync
mit , dass ein.