【问题标题】:FTP copy file to remote machine failed in Bash Script在 Bash 脚本中,FTP 复制文件到远程机器失败
【发布时间】:2015-06-19 06:36:49
【问题描述】:

我已经制作了 bash 脚本,它将备份文件并将其发送到远程机器创建文件但 ftp 未能将其放入提到的目录 当 ftp 试图复制文件时,问题就出在这了。 这是我的脚本:

#!/bin/bash 
#BACKUP ROOT DIRECTORIES
DESTINATION="/backup";
HOST=localhost
USER=qwerty
PASS=qwerty
COUNT=$(cd /backup/ && ls -l | wc -l);
echo $COUNT;
DIR="/dev /sys /etc /www /var /rom /root /dev /overlay /bin /sbin /nebero /lib /usr";
DIR="/root/pen";
DIR_1="/dev /sys /etc /www /var /rom /root /dev /overlay /bin /sbin /nebero /lib /usr /mnt";
DIR_1="/root/pen";

    if [ "$1" = "FULL_BACKUP" ]
    then

        tar cvf $DESTINATION/full_backup_`date +%d-%m-%y_%H:%M`.tar `echo $DIR_1` >>/dev/null;

        if [ $COUNT -eq 1 ]
        then
        NEW=$(ls -t /*back*/ | head -n2);
        else
        NEW=$(ls -t /*back*/ | head -n2 | sed '2!d');
        fi  

    elif [ "$1"  = "CONF_BACKUP" ]
    then
        tar cvf $DESTINATION/conf_backup_`date +%d-%m-%y_%H:%M`.tar `echo $DIR` >>/dev/null;
        NEW=$(ls -t /*back*/ | head -n2 | sed '1!d');

    else
        echo "Please provide an argument";
        exit

    fi

FILE=$NEW

ftp -in $HOST <<EOF
user $USER $PASS
pwd
cd /rav
put $FILE
bye
EOF

【问题讨论】:

  • 具体问题或错误是什么? $FILE 是否放到了其他目录?脚本的输出是什么?

标签: linux bash shell ftp


【解决方案1】:

首先,看起来所有ls 命令的目的都是为了找到您刚刚创建的文件。如果您只是在调用tar 之前将文件名保存到变量中,则可以跳过所有这些:

FILENAME=full_backup_`date +%d-%m-%y_%H:%M`.tar

然后在tar 命令中使用$DESTINATION/$FILENAME,在ftp 命令中使用$FILENAME

关于上传失败,你确定你是在本地正确的目录吗?

这些是用于更改目录的 FTP 命令:

  • cd:更改远程机器上的目录
  • lcd:更改本地机器上的工作目录

在执行put之前确保两者都正确。

【讨论】:

  • 实际上,cdup 将远程目录更改为其父目录。更改本地目录的命令是lcd
  • @rojomoke:感谢您发现这一点。
猜你喜欢
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 2021-03-08
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多