Eu tenho dois problemas com o meu script que copia arquivos e adiciona um carimbo de data e hora ao nome.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%T")
O texto acima é adicionado Test2
como o nome do arquivo, mas eu quero que ele mantenha o nome do arquivo original, que neste exemplo é nomeado Test
.
cp -ra /home/bpacheco/Test1 /home/bpacheco/Test2-$(date +"%m-%d-%y-%r")
O outro problema é que, quando adiciono o %r
código como timestamp, recebo o erro informando que o destino "PM" não é um diretório. Estou tentando obter o registro de data e hora como relógio de 12 horas.
shell-script
date
file-copy
timestamps
Brian
fonte
fonte
date +"%m-%d-%y-%I:%M:%S_%p"
Respostas:
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:Se você deseja anexar ao nome do arquivo original, é necessário inseri-lo em uma variável.
Se você estiver usando o bash, poderá usar a expansão de chaves.
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 valorsource
sem a parte até a última/
(remove o prefixo mais longo que corresponde ao padrão*/
):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 paraTest1-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.
fonte
cp -a /home/bpacheco/Test1/Test{,"-$(date +"%m-%d-%y-%r")"} /home/bpacheco/Test2