Em um arquivo de cópia de tempo de execução e altere seus nomes para valores exclusivos

0

Eu quero fazer um cronjob que faça uma cópia de cada arquivo em / var / log, e coloque-o em / etc / bak. Isso eu faço fazendo um arquivo sh dizendo

cp /var/log/*.* /etc/bak

Eu gostaria que esses arquivos não fossem sobrescritos, mas fossem exclusivos. Para fazer isso, eu queria colocar a data / hora no nome do arquivo. Existe alguma maneira de tornar isso possível em uma cópia de arquivo em lotes?

    
por Randy 11.12.2013 / 12:22

2 respostas

2

Que tal colocar todos os lotes de arquivos de log em um diretório separado? Você poderia fazer isso usando:

dir=/etc/bak/'date "+%Y-%m-%d_%H.%M.%S"'
mkdir "$dir"
cp /var/log/*.* $dir

Se você quiser prefixar todos os arquivos copiados com um timestamp, faça o seguinte:

(cd /var/log && ls -1 *.*) | awk -v date='date "+%Y-%m-%d_%H.%M.%S"' '{ print "cp /var/log/" $0 " /etc/bak/" date  $0}' | sh
    
por rzymek 11.12.2013 / 12:40
0

Para copiar arquivos para outro diretório e alterar seus nomes no progresso, recomendo usar um loop.

O código a seguir extrai o nome do arquivo usando basename e, em seguida, cria uma cópia desse arquivo em /etc/bak com o nome do arquivo original, com uma data anexada.

for file in /var/log/*; do 
    bn=$(basename $file)
    cp $file /etc/bak/${bn}.$(date +%F)
done
    
por drc 11.12.2013 / 13:35