脚本中 mv 命令的问题

脚本中 mv 命令的问题

这肯定是一个非常简单的问题,但我被困住了(不是 UNIX 专业人士)。我需要将 gz 移动到目标目录,但我得到了No such file or directory.

NOW=$(date +"%Y-%m-%d-%T")

DEST="~/scripts/backup"
SQL_DUMP="db_dump_$NOW.sql.gz"
echo "$SQL_DUMP"

drush sql-dump | gzip -9 > $SQL_DUMP
mv -t $DEST $SQL_DUMP

sql.gz正确创建,只有最后一个命令不起作用。我应该如何使用它?谢谢。

答案1

问题是不是按照你的mv命令。

波形符扩展~是 shell 将字符替换为用户主目录时执行的操作的名称,例如/home/username。可以通过引用波浪号字符来告诉 shell 不要执行此操作。这正是你所做的

DEST="~/scripts/backup"

您已分配给DEST字符串~/scripts/backup。该目录实际上并不存在。两种解决方案:

  • 不要引用这个~角色:

    DEST=~/scripts/backup
    
  • 改用$HOME

    DEST="$HOME/scripts/backup"
    

最后的调试技巧

放在set -x脚本的顶部以打开该xtrace选项。如果您这样做了,您会发现该mv命令使用了错误的目录,~/scripts/backup而不是/home/yourname/scripts/backup.

答案2

MV手动的

SYNOPSIS
    mv [SOURCE] [DEST]

您可能想检查 $DEST 是否已经存在:

if [ -d ${DEST} ]; then
    do something
fi

如果没有,请使用目录-p作为创建父目录的参数。

...
else
    mkdir -p ${DEST}
fi

相关内容