Problema com o comando mv em um script

1

Este deve ser um problema muito simples de resolver, mas estou preso (não um pro UNIX). Eu preciso mover um gz para um diretório de destino, mas eu recebo um 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

O sql.gz é criado corretamente, apenas o último comando não funciona. Como devo usá-lo? Obrigado.

    
por Jérôme Verstrynge 17.02.2012 / 21:54

2 respostas

4

O problema não é com seu comando mv .

Expansão de til é o nome do que o shell faz quando substitui o caractere ~ pelo diretório pessoal do usuário, por exemplo, %código%. É possível dizer ao shell para não fazer isso citando o caractere til. Isso é exatamente o que você fez em

DEST="~/scripts/backup"

Você atribuiu a /home/username a string DEST . Este diretório não existe realmente. Duas soluções:

  • Não cite o caractere ~/scripts/backup :

    DEST=~/scripts/backup
    
  • Use ~ :

    DEST="$HOME/scripts/backup"
    

Uma dica final de depuração

Coloque $HOME no topo do seu script para ativar a opção set -x . Se você tivesse feito isso, você teria visto que o comando xtrace estava usando o diretório errado, mv em vez de ~/scripts/backup .

    
por 17.02.2012 / 23:01
-1

Leia o manual mv

SYNOPSIS
    mv [SOURCE] [DEST]

E você pode querer verificar se o $ DEST já existe:

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

Se não, use mkdir com -p como parâmetro para criar diretórios pai.

...
else
    mkdir -p ${DEST}
fi
    
por 17.02.2012 / 22:02