2016-04-27 240 views
1

我想從本地服務器(服務器A)上運行的腳本從遠程服務器(服務器B)在特定時間範圍內複製一組文件。 我在find中使用-newermt選項來指定我的時間範圍。 所以,如果我ssh到遠程服務器(服務器B)這工作:傳遞變量通過ssh查找-newermt選項

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" 

我也得到了規定的時間的文件列表。

但是,如果我試圖通過SSH從本地服務器(服務器A)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 

這給了我一個發現錯誤:

發現:路徑必須先表達:07: 40:00

這樣看來,用這種方法發現不喜歡在空間「2016年4月26日7時四十分00秒」

我試圖轉換爲unixtimestamps避免使用如步伐卻發現不喜歡那些:

發現:我無法弄清楚如何解釋'1461678000' 作爲一個日期或時間

我的問題是我必須劃定空格字符這個或大括號,我正在嘗試一些事情,但完全摸不着頭腦: - /任何幫助表示讚賞。

謝謝!

+1

您需要引號才能被* remote *服務器看到,而不是本地引用。用雙引號引用* entire *'find'命令,並在當前有雙引號的地方使用單引號。 –

+0

就是這樣,非常感謝! –

回答

0

問題是你在本地引用而不是在遠程引用。

您使用周圍"$T1""$T2"被去除由本地shell運行ssh命令,但遠程命令在此之前沒有引號保護空間從遠程shell雙引號。

所以當地的外殼看到:

[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] 

但遠程shell看到:

[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] 

,這就是問題。

-newermt的參數被視爲2016-04-2607:40:00被視爲其find視爲一個路徑,因此它給你的「路徑必須是第一位的」錯誤流浪的說法。

您需要將引號傳到遠程端,以便雙引號(整個字符串允許在本地進行可變擴展),然後在遠程shell的擴展值周圍使用單引號。

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