2016-04-27 12 views
1

ローカルサーバ(サーバA)上で実行されるスクリプトを使用して、リモートサーバ(サーバB)から特定の時間範囲内のファイルのグループをコピーしようとしています。 findで-newermtオプションを使用して時間範囲を指定しています。 私は、リモートサーバ(サーバB)へのSSHのであれば、これは動作します:-newermtオプションのsshで検索する変数を渡す

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

だから、私のように使用しないようにunixtimestampsに変換しようとしたこの方法の発見で、「2016年4月26日午前7時40分00秒」に

をスペースを好きではないように見えますペースが、見つけることがそれらを好きではない:

検索:私は、日付や時刻として `1461678000を解釈する方法を見つけ出すことはできません

私の質問は、私はこのまたは中括弧のためのスペース文字を区切るために持っているです、私はいくつかのことをしようとしているが、まったく不安を抱えている。

ありがとうございます!

+1

ローカルのサーバーではなく*リモート*サーバーに見えるようにする必要があります。 *全体* 'find'コマンドを二重引用符で囲み、二重引用符を使用している場合は一重引用符を使用してください。 –

+0

それは、とてもありがとうございます! –

答えて

0

問題は、ローカル側では引用していて、リモート側では引用していないことです。

あなたの周り "$T1""$T2"使用している二重引用符が sshコマンドを実行する前に、ローカルのシェルによって除去されている

が、リモートコマンドは、リモートシェルから宇宙を守る引用符を持っていません。

ように、ローカルシェルが見ている:

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

をしかし、リモートシェルは見ている:

[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がパスとして見ているので、それはあなたの「パスは最初に来なければならない」というエラーを与える浮遊引数として見られています。

文字列全体を二重引用符で囲む必要があります(変数の拡張をローカルで許可するため)。次に、リモートシェルの展開された値を一重引用符で囲みます。

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