在 lftp 中添加 shell if 语句



我正在尝试使用 SFTP 将一些文件从一台服务器复制到另一台服务器,此任务应每周运行一次。我使用的脚本:

HOST='sftp://my.server.com'
USER='user1'
PASSWORD='passwd'
DIR=$HOSTNAME
REMOTE_DIR='/home/remote' 
LOCAL_DIR='/home/local'     
# LFTP via SFTP connexion
lftp -u "$USER","$PASSWORD" $HOST <<EOF
# changing directory
cd "$REMOTE_DIR"
$(if [ ! -d "$DIR" ]; then
mkdir  $DIR
fi)
put -O "$REMOTE_DIR"/$DIR  "$LOCAL_DIR"/uploaded.txt
EOF 

我的问题是 put 是在不考虑if 语句的结果的情况下执行

PS :我收到的错误消息如下:

放置:访问失败:没有这样的文件(/home/backups/myhost/upload.txt(

LFTP 没有if语句!

你在这里做什么?

lftp -u "$USER","$PASSWORD" $HOST <<EOF
cd "$REMOTE_DIR"
$(if [ ! -d "$DIR" ]; then
mkdir  $DIR
fi)
put -O "$REMOTE_DIR"/$DIR  "$LOCAL_DIR"/uploaded.txt
EOF 

在此处文档中调用 sub 命令。sub 命令在启动之前在本地执行lftp其输出粘贴到 here 文档中,该文档将传递给lftp。这很有效,因为mkdir没有输出。您不调用 ftp 服务器上的mkdir。您调用本地外壳的mkdir。实际上,这与将if语句放在lftp执行之前相同。

if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
lftp -u "$USER","$PASSWORD" $HOST <<EOF
cd "$REMOTE_DIR"
put -O "$REMOTE_DIR"/$DIR  "$LOCAL_DIR"/uploaded.txt
EOF 

你想做的事情,不起作用。你必须考虑一个不同的解决方案。

现在我没有FTP服务器来测试它,但是可以使用LFTP的-f选项mkdir。我假设它可能像 Unixrm命令的-f选项一样工作。试试这个:

lftp -u "$USER","$PASSWORD" $HOST <<EOF
cd "$REMOTE_DIR"
mkdir -f "$DIR"
put -O "$REMOTE_DIR"/$DIR  "$LOCAL_DIR"/uploaded.txt
EOF 

更新:它按预期工作。如果您使用选项-f创建已经存在的目录不会引发错误:

lftp anonymous@localhost:/pub> mkdir -f dir
mkdir ok, `dir' created
lftp anonymous@localhost:/pub> mkdir -f dir
lftp anonymous@localhost:/pub> ls
drwx------    2 116      122          4096 Aug 10 12:04 dir

也许你lftp客户端已经过时了。我用 Debian 9 测试了它。

相关内容

  • 没有找到相关文章

最新更新