Kamelot schrieb:
Guten Tag Miteinander
Auch von mir ein herzliches Willkommen hier im Forum!
Mein vor geraumer Zeit erstelltes Skript geht sämtliche Dateien in einem Quellverzeichnis durch
und sucht sich die Dateien raus, in welchen eine der sechs Nummernfolgen (egrep) vorkommt und das Erstelldatum von "Gestern" ist.
Du suchst die Folgen im Dateiinhalt, entnehme ich Deinem Skript.
Nun gibt es im Quellverzeichnis jeweils Dateipäärchen, eine Datei beginnt mit dem Namen "envl*" die andere mit "data*".
Die Eingangs erwähnten Nummerfolgen kommen in beiden Dateien vor.
Jetzt müsste ich zusätzlich gewährleisten können, dass entweder alle "data*"-Files zuerst ins Zielverzeichnis oder besser das "data*"-File
eines Pärchens jeweils zuerst ins Zielverzeichnis kopiert wird.
Das kann man recht bequem mit find
lösen - das ginge sogar mit einem einzigen Aufruf, wenn man "-o" nutzt, denke ich. Das Muster für egrep
kann man auch noch kompakter (und auch einen Tick effizienter) machen, denn die Alternativen enthalten sich wiederholende Teile; das sieht man, wenn man etwas umformatiert:
">1-4001-1<
|>1-4021-1<
|>1-4045-1<
|>1-4141-1<
|>1-4034-1<
|>1-4258-1<"
Was Du da mit egrep
und der Pipe machst, ist verhältnismäßig unsicher. Wenn ein Zeilenumbruch in einem Dateinamen vorkommt, funktioniert es nicht. Mindestens müsstest Du egrep -lZ
und read -d '' -r
nutzen. Du solltest auch Deine Variablen mit Dateinamen quoten, sonst führen auch Leerzeichen in Dateinamen zu Problemen.
Zum Lösungsvorschlag: blöd ist, dass scp
leider nicht die Quelldateien am Ende akzeptiert. Das wäre aber wünschenswert, denn dann könnte man mehrere Dateien mit einem Aufruf kopieren. Das ist sinnvoll, denn der Aufbau der SSL-Verbindung ist relativ teuer. Dann schlage ich doch zwei Durchläufe von find
vor (ungetestet, weil ich die Dateien nicht da habe):
| for pattern in 'data*' 'envl*'; do
find /appl/geresAdapter/sent -type f -mtime 1 -name "$pattern" \
-exec egrep -lZ '>1-4(001|021|045|141|034|258)-1<' {} +
done | xargs -r0 dash -c 'echo scp -p -q "$@" geres@svuaf015:/appl/sedexAdapter_aux/inbox' --
|
Ich habe ein echo
eingefügt, damit Du erst mal schauen kannst, ob der Befehl die Dateien in der Reihenfolge kopiert, die Du möchtest. Wenn es klappt, lösch das "echo " aus Zeile 4 einfach raus.
Noch eine Anmerkung: das Muster für egrep
kann man natürlich noch kompakter machen, aber ich wollte es nicht gleich übertreiben. ☺
Versuch bitte erst mal selber, herauszufinden, was das da oben tut. Wenn etwas unklar ist, frag einfach, dann erkläre ich es.
Ciao
robert