2016-04-27 9 views
1

Ich versuche, eine Gruppe von Dateien in einem bestimmten Zeitraum von einem Remote-Server (Server B) mit einem Skript auf einem lokalen Server (Server A) ausgeführt kopieren. Ich verwende die Option -newermt in Find, um meinen Zeitbereich anzugeben. Also, wenn ich auf dem Remote-Server (Server B) ssh dies funktioniert:übergeben Variable über ssh für -newermt Option zu finden

find /appl/backup/monsters/green/y.y.y.y/2016-04-26_08-00-01/jelly/ -newermt "2016-04-26 07:40:00" \! -newermt "2016-04-26 07:50:00" 

Und ich bekomme die Liste der Dateien für die angegebenen Zeiten.

jedoch Wenn ich versuche, die vom lokalen Server (Server A) via ssh auf involke:

#!/bin/bash 
#   
CLUSTER="green" 
node="x.x.x.x" 
STIME="2016-04-26_08-00-01" 
#T1=1461678000 
#T2=1461678600 
T1="2016-04-26 07:40:00" 
T2="2016-04-26 07:50:00"    
ssh [email protected] find /appl/backup/monsters/${CLUSTER}/${node}/${STIME}/jelly/ -newermt "$T1" \\! -newermt "$T2" 
echo $latest_file 
echo SCP Completed. 
exit 

Das gibt mir einen Fund Fehler:

Fund: Wegen Ausdruck vorangestellt werden muss: 07: 40:00

so scheint es, dass mit dieser Methode findet nicht den Raum mag in „2016.04.26 07.40.00“

versuchte ich zu unixtimestamps Umwandlung zu vermeiden, verwenden Tempo aber finden diejenigen nicht mag:

Fund: Ich kann nicht herausfinden, wie man als Datum oder Uhrzeit

Meine Frage `1461678000' interpretieren ist kann ich das Leerzeichen für diese oder geschweiften Klammern zu begrenzen haben, Ich probiere ein paar Dinge aus, aber ich fummle herum: -/jede Hilfe wird geschätzt.

Danke!

+1

Sie brauchen die Anführungszeichen, die vom * remote * -Server angezeigt werden, nicht vom lokalen. Zitieren Sie den Befehl * full in doppelten Anführungszeichen und verwenden Sie einfache Anführungszeichen, an denen Sie derzeit doppelte Anführungszeichen haben. –

+0

Das war's, vielen Dank! –

Antwort

0

Das Problem ist, dass Sie auf der lokalen Seite, aber nicht auf der entfernten Seite angeben.

Die doppelte Anführungszeichen Sie verwenden um "$T1" und "$T2" werden vor dem Ausführen des ssh Befehl von der lokalen Schale entfernt werden, aber die Remote-Befehl dann nicht über die Anführungszeichen um den Raum von der Remote-Shell zu schützen.

So ist die lokale Shell sieht:

[ssh] [[email protected]] [find] [/appl/backup/monsters/${CLUSTER}/${node}/${STIME}/jelly/] [-newermt] [2016-04-26 07:40:00] [\!] [-newermt] [2016-04-26 07:50:00] 

aber die Remote-Shell sieht:

[ssh] [[email protected]] [find] [/appl/backup/monsters/${CLUSTER}/${node}/${STIME}/jelly/] [-newermt] [2016-04-26] [07:40:00] [\!] [-newermt] [2016-04-26] [07:50:00] 

und das ist das Problem.

Das Argument -newermt als 2016-04-26 und 07:40:00 gesehen wird als Streu Argument gesehen, die find als Weg sieht und es gibt Ihnen so die Fehlermeldung „Pfade kommen, müssen zuerst“.

Sie müssen die Anführungszeichen verwenden, um zur entfernten Seite zu gelangen, damit die gesamte Zeichenfolge doppelt zitiert wird (um eine lokale Variablenerweiterung zu ermöglichen) und dann einfache Anführungszeichen um die erweiterten Werte für die Remote-Shell verwenden.

ssh [email protected] "find '/appl/backup/monsters/${CLUSTER}/${node}/${STIME}/jelly/' -newermt '$T1' \! -newermt '$T2'"