无法创建名为日期的远程目录

时间:2011-03-10 06:19:56

标签: shell unix

这个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 foo@$1 'mkdir $TGTDIR'
/usr/bin/scp -P 1234 -i $KEYFILE $TESTDMPDIR/*.gz foo@$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

2 个答案:

答案 0 :(得分:4)

我认为问题是“mkdir $ TGTDIR”周围的单引号“'”。 如果变量用单引号括起来,则不会展开变量。 因此你应该尝试

/usr/bin/ssh -p 1234 -i $KEYFILE foo@$1 "mkdir $TGTDIR"

答案 1 :(得分: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'