Um dos seus problemas é que você deixou de fora as aspas duplas em torno da substituição do comando, então a saída do comando date
foi dividida em espaços. Veja Por que meu script de shell sufocar em espaços em branco ou outros caracteres especiais? Este é um comando válido:
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%m-%d-%y-%r")"
Se você deseja anexar ao nome do arquivo original, é necessário ter isso em uma variável.
source=/home/bpacheco/Test1
cp -a -- "$source" "$source-$(date +"%m-%d-%y-%r")"
Se você estiver usando o bash, poderá usar a expansão de chaves.
cp -a /home/bpacheco/Test1{,"-$(date +"%m-%d-%y-%r")"}
Se você deseja copiar o arquivo para um diretório diferente e anexar o registro de data e hora ao nome do arquivo original, você pode fazê-lo desta forma - ${source##*/}
expande para o valor de source
sem a parte até o último /
(remove o prefixo mais longo que corresponde ao padrão */
):
source=/home/bpacheco/Test1
cp -a -- "$source" "/destination/directory/${source##*/}-$(date +"%m-%d-%y-%r")"
Se Test1
for um diretório, ele será copiado recursivamente e os arquivos dentro do diretório manterão seu nome: somente o diretório de nível superior receberá um registro de data e hora anexado (por exemplo, Test1/foo
é copiado para Test1-05-10-15-07:19:42 PM
). Se você deseja anexar um registro de data e hora a todos os nomes de arquivos, isso é um problema diferente.
Sua escolha do formato de registro de data e hora é uma má ideia: é difícil de ler para humanos e difícil de classificar. Você deve usar um formato mais fácil de ler e que pode ser classificado facilmente, ou seja, com partes em ordem decrescente de importância: ano, mês, dia, hora, minuto, segundo e com uma separação entre a parte da data e a parte do tempo.
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y%m%d-%H%M%S")"
cp -a /home/bpacheco/Test1 "/home/bpacheco/Test2-$(date +"%Y-%m-%dT%H%M%S%:z")"