![脚本中 mv 命令的问题](https://linux22.com/image/20953/%E8%84%9A%E6%9C%AC%E4%B8%AD%20mv%20%E5%91%BD%E4%BB%A4%E7%9A%84%E9%97%AE%E9%A2%98.png)
这肯定是一个非常简单的问题,但我被困住了(不是 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