Um dos seus problemas é que você deixou as aspas duplas em torno da substituição do comando, portanto a saída do date
comando foi dividida em espaços. Consulte Por que meu script de shell engasga com 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 inseri-lo 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 carimbo de data / hora ao nome do arquivo original, pode fazê-lo desta maneira - ${source##*/}
expande para o valor source
sem a parte até a última /
(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 é copiado recursivamente e os arquivos dentro do diretório mantêm seu nome: somente o diretório de nível superior recebe um carimbo de data / hora anexado (por exemplo, Test1/foo
é copiado para Test1-05-10-15-07:19:42 PM
). Se você deseja anexar um carimbo de data / hora a todos os nomes de arquivo, esse é um problema diferente.
Sua escolha do formato do carimbo de data e hora é uma péssima idéia: é difícil ler para humanos e difícil de classificar. Você deve usar um formato mais fácil de ler e que possa 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 da hora.
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")"