2011-03-10 41 views
2

我在做這個shell腳本有什麼問題?我想遠程創建一個目錄,並用日期戳命名。無法創建名爲日期的遠程目錄

DIRDATE=`date '+%Y%m%d'` 
BASE=/home/foo 
KEYFILE=$BASE/.ssh/host_rsa 
TESTDMPDIR=/home/files 
TGTDIR=$BASE/$DIRDATE 
export BASE KEYFILE TESTDMPDIR TGTDIR 

/usr/bin/ssh -p 1234 -i $KEYFILE [email protected]$1 'mkdir $TGTDIR' 
/usr/bin/scp -P 1234 -i $KEYFILE $TESTDMPDIR/*.gz [email protected]$1:$TGTDIR 

輸出:(它說的目錄存在,但事實並非如此)

mkdir: cannot create directory `$TGTDIR': File exists 
foobar.dat.gz             100% 0  0.0KB/s 00:00 

服務器:(注意,它創建一個文件,而不是目錄)

-rw-r--r-- 1 foo users 0 Mar 9 22:13 20110309 
+0

沒有任何理由'出口'任何這些變量。 – 2011-03-10 06:48:24

回答

4

我認爲問題是「mkdir $ TGTDIR」周圍的單引號「'」。 如果用單引號括起來,該變量不會被展開。 因此,你應該嘗試

/usr/bin/ssh -p 1234 -i $KEYFILE [email protected]$1 "mkdir $TGTDIR" 
+0

@ bmk-謝謝。它現在有效。這是問題所在。 – jdamae 2011-03-10 06:39:05

0

mkdir:不能創建目錄`$ TGTDIR':文件存在,這意味着文件已經存在,如果你多次執行相同的腳本,它會嘗試創建具有相同日期名稱的文件,一旦文件創建它將不會覆蓋它拋出文件存在,

使用條件有

DIRDATE=`date '+%Y%m%d'` 
BASE=/home/foo 
KEYFILE=$BASE/.ssh/host_rsa 
TESTDMPDIR=/home/files 
TGTDIR=$BASE/$DIRDATE 

    if [ ! -f $TGTDIR ] 
     then 
      create 
     fi 

,或者如果你想創建多次再加入 小時,分鐘和秒來DIRDATE=日期「+%Y%M%D-%H-%M-% S'

+0

該目錄不存在。我運行之前將其移除。另外,我使用的shell非常有限。所以,我不能做遠程測試-d。我只能做一個mkdir。 – jdamae 2011-03-10 06:33:35