A cópia BASH para outro diretório não está funcionando

4

Em primeiro lugar, admito que sou novo nos sistemas baseados em UNIX, atualmente estou aprendendo na faculdade.

Estou tentando criar uma função que automatiza um backup de um arquivo existente para um diretório existente. No entanto, estou recebendo uma mensagem na CLI que cita:

cp: cannot create regular file '../Logs/bashmenu.22:52:28-06/12/2016.sh': No such file or directory

Eu fiz uma boa quantidade de auto-pesquisa, mas não consigo encontrar uma solução para o meu problema.

O caminho do diretório para o arquivo que contém a função, que eu quero fazer backup, é:

/Home/Scripts/bashmenu.sh

O caminho do diretório para o local no qual desejo fazer backup é:

/Home/Logs/TARGET

Ao fazer o backup do arquivo, gostaria que fosse uma data marcada. Então, usei algumas variáveis ​​para obter a convenção de nomenclatura para o arquivo quando o backup foi feito. Acredito que é isso que está causando um problema. Eu não sei se isso causa um problema, mas o arquivo e os diretórios estão todos em um USB, eu apenas criei um caminho de diretório semelhante para ele.

Aqui está parte do meu script, as partes que acredito que fazem a diferença:

#### #!/bin/bash
fullname=`basename "$0"`
now=`date +"%H:%M:%S-%d/%m/%Y"`;
backupname="${fullname%.*}"".""$now.sh"
cp -v $fullname ../Logs/$backupname
Jamjar91
fonte
Obrigado pela edição Zanna, está arrumado o post. :)
Jamjar91
Chave de aço, isso foi corrigido, obrigado pela assistência rápida. Eu pensei que se a data estivesse sendo salva como uma variável, ela seria aceita como uma sequência de texto. Você pode alterar seu comentário para uma resposta para que eu possa aceitá-lo, por favor. Obrigado. :)
Jamjar91
Ops, o último comentário foi de caracteres incorretos. Corrigido. Convém alterar seu $ agora também para a lista de pedidos cronológicos por data como% Y-% m-% d_% H:% M:% S
Terrance

Respostas:

5

O caractere separador de caminho /é estritamente proibido nos nomes de arquivos (imagine o inferno que seria desencadeado se não fosse assim!)

Caso contrário ... os backticks para substituição de comando estão meio obsoletos, então eu mudei ... E ajustei sua cotação um pouco

Se você realmente deseja que o script se copie para o destino ...

#!/bin/bash
fullname=$(basename "$0")
now=$(date +"%H:%M:%S-%d.%m.%Y")
backupname="${fullname%.*}"."$now.sh"
cp -v "$fullname" ../Logs/"$backupname"

Portanto, a função pode ser algo como

backup() {
fullname=$(basename "$1")
now=$(date +"%H:%M:%S-%d.%m.%Y")
backupname="${fullname%.*}"."$now.sh"
cp -v "$fullname" /path/to/wherever/"$backupname"
}
Zanna
fonte
Obrigado Zanna, pensei que, como a data fosse armazenada como uma variável, os dados seriam aceitos como texto, desde então eu os alterei e está funcionando. Essa função é muito parecida com a aparência das minas no meu script completo, eu nunca a incluí como uma na pergunta original. :)
Jamjar91