paulo1205
(usa Ubuntu)
Enviado em 29/05/2019 - 08:19h
Vicasonic escreveu:
Boa noite,
Estou tentando criar um script de backup e quando executo apresenta a seguinte mensagem...
>> cp: o alvo "/opt/sistema/arquivos.exe" não é um diretório.
A mensagem significa que o comando
cp está interpretando
/opt/sistema/arquivos.exe como destino da cópia, não como um dos elementos a serem copiados. Como
/opt/sistema/arquivos.exe é um arquivo, e a cópia provavelmente tem mais de três arquivos, então o destino teria de ser um diretório.
acredito que o erro seja quando tento usar o mkdir, estou fazendo da seguinte maneira
>> BackupExec=$(mkdir /opt/backup_exec_`date +%d-%m-%y`)
Sim, o problema está exatamente aí. Do jeito como você fez, a variável
BackupExec recebe como valor aquilo que o comando
mkdir tiver imprimido. Como esse comando não imprime nada, a variável fica vazia, ...
>> cp -rv /opt/sistema/*.exe $BackupExec
... e essa variável vazia, ao ser expandida na linha de comando do
cp, é simplesmente ignorada, como se não existisse, de modo que o último argumento da linha de comando, que deveria ser o destino da cópia, acaba sendo o arquivo que resultar por último da expansão de
/opt/sistema/*.exe.
Você até que deu sorte: se fossem apenas dois arquivos, o
cp interpretaria isso como uma cópia de arquivos, e sobrescreveria o segundo com o conteúdo do primeiro.
Como corrigir?
Provavelmente você quis dizer o seguinte.
BackupExec="/opt/backup_exec_$(`date +%d-%m-%y`)"
mkdir -p "$BackupExec" && cp -rv /opt/sistema/*.exe "$BackupExec"
Note o uso das aspas ao invocar
mkdir e
cp. Desse jeito, mesmo que a varável estivesse vazia, ela ainda provocaria a presença de um argumento ali. No caso do
cp, isso protegeria você de, se houver apenas dois arquivos com sufixo “.exe” no diretório, sobrescrever o segundo com o conteúdo do primeiro.
O uso do encadeamento com
&& implica que a cópia só vai acontecer se o diretório destino tiver sido criado com sucesso.
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)