スクリプトの 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

チルダ拡張~文字をユーザーのホームディレクトリに置き換えるときにシェルが実行する操作の名前/home/username。チルダ文字を引用して、これを行わないようにシェルに指示できます。それがあなたがしたことです。

DEST="~/scripts/backup"

DESTstringに割り当てました~/scripts/backup。ディレクトリは実際には存在しません。 2つの解決策:

  • 次の文字を引用しないでください~

    DEST=~/scripts/backup
    
  • 代わりに使用してください$HOME

    DEST="$HOME/scripts/backup"
    

最終デバッグのヒント

オプションset -xをオンにするには、スクリプトの上部でこれを行うと、コマンドが代わりxtracemv間違ったディレクトリを使用していることがわかります。 ~/scripts/backup/home/yourname/scripts/backup

答え2

読むMV手動

SYNOPSIS
    mv [SOURCE] [DEST]

$DESTがすでに存在することを確認したい場合があります。

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

そうでない場合目次そして-血親ディレクトリを作成するためのパラメータとして。

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

関連情報