这个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
答案 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'