[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Script VIRA aprimorado
From: |
Kleber Melo |
Subject: |
Script VIRA aprimorado |
Date: |
Thu, 4 Jul 2013 13:34:48 -0700 (PDT) |
Boa tarde a todos!
Este é meu primeiro post aqui no grupo e quero disponibilizar algo que possa
ser legal para o nosso dia a dia.
Tomei a liberdade de pegar o script "vira" de nosso mestre Júlio Neves e
acrescentar algumas rotinas que julgo necessárias.
1º) No caso montei a rotina para manter X arquivos de backup na máquina,
removendo os mais antigos. Sendo assim, caso você queira restaurar alguma
função, pode recorrer ao arquivo "becapeado".
2º) Outro ponto importante é quando você abre o arquivo e não mexe em nada. Pra
quê fazer backup de algo que não foi alterado? Portanto, o script checa o time
stamp e compara o horário do mesmo, se tiver igual, remove o backup criado.
Abaixo exibo as saídas dos dois cenários, ou seja, após a abertura do arquivo:
1)
Status do arquivo ANTES da edição => 17:19:40.832108946
Status do arquivo DEPOIS da edição => 17:28:49.172108802
Backup efetuado -> OK
Voce possui 5 arquivos de backup ou menos...
-rwxr-xr-x 1 root root 553 2013-07-04 17:15 k22_2013-07-04_17:15:09
-r-xr-xr-x 1 root root 554 2013-07-04 17:19 k22_2013-07-04_17:19:04
-r-xr-xr-x 1 root root 558 2013-07-04 17:19 k22_2013-07-04_17:19:33
-r-xr-xr-x 1 root root 553 2013-07-04 17:28 k22_2013-07-04_17:28:38
2)
Status do arquivo ANTES da edição => 17:28:49.172108802
Status do arquivo DEPOIS da edição => 17:28:49.172108802
removed `k22_2013-07-04_17:30:26'
##### Arquivo de backup "k22_2013-07-04_17:30:26" removido do sistema #####
Obviamente você poderá alterar conforme sua necessidade, ok!
O que acho legal no software livre e na comunidade é isto, a generosidade e o
prazer em contribuir com algo útil.
Deu um certo trabalho chegar aqui, mas fico muito feliz em criar este atalho
pra vocês.
Abraços e obrigado pelo ponta pé inicial do Júlio César Neves
Kleber Melo
###############################################################
#!/bin/bash
clear
###################################################
#
#By Julio Cesar Neves
#vira – vi resguardando arquivo anterior
# == = =
###################################################
# Verificando se foi passado 1 parametro
if [ "$#" -ne 1 ]; then
echo
echo "Especifique apenas 1 arquivo..."
echo
exit 1
fi
###################################################
# Caso o arquivo não exista, nao ha copia para ser salva
Arq=$1
if [ ! -f "$Arq" ]; then
vi $Arq
exit 0
fi
###################################################
# Se nao puder alterar o arquivo vou usar o vi para que?
# Obs: O root pode abrir o arquivo e salvar, mesmo sem permissao de gravacao
if [ ! -w "$Arq" ]; then
echo
echo "Voce nao tem direito de gravacao no arquivo $Arq"
echo
exit 2
fi
#####################################################
# Abaixo seguem as adaptacoes
# By Kleber Melo
# Data: 28/01/2013
#####################################################
# Quantidade de arquivos de backup a manter na maquina
qtde=5
# Pega os dados do "time stamp" do arquivo ANTES DO BAKUP para comparacao
x=$(stat $Arq | grep -i modify | awk '{print$3}')
# Realiza o bakup do arquivo no mesmo diretorio que ele se encontra,
adicionando data/hora ao nome do arquivo
cp -f $Arq ${Arq}_$(date +'%Y-%m-%d_%H:%M:%S')
# Abre o arquivo solicitado
vi $Arq
echo
echo "Status do arquivo ANTES da edição => $x"
# Pega os dados do time stamp do arquivo DEPOIS DO BACKUP para comparacao ->
apos a abertura
y=$(stat $Arq | grep -i modify | awk '{print$3}')
echo "Status do arquivo DEPOIS da edição => $y"
echo
###################################################
# Visto que muitas vezes se abre um arquivo e nao ha edicao, nao tem por que
manter um backup do mesmo
# Compara o "time stamp" do arquivo original e do copiado para decidir sua
remocao ou backup
if [ $y == $x ]; then
# Se o time stamp for igual, o arquivo original nao foi alterado, logo nao
precisa de backup
old=$(ls -ltr "${Arq}"_*)
for i in $(echo -en "$old\n" | tail -n1 | awk '{print$8}'); do
rm -vf $i
sleep .5
echo
echo "##### Arquivo de backup \"$i\" removido do sistema #####"
echo
done
else
# Se o time stamp for diferente significa que houve alteracao no arquivo,
portanto mantem o backup
echo
echo "Backup efetuado -> OK"
echo
# Checagem do numero de arquivos de backup para manter no minimo o numero de
arquivos da variaval '$qtde'
bkp=$(ls -ltr "$Arq"_*)
# Total de arquivos existentes
total=$(echo -en "$bkp\n" | awk '{print$8}' | wc -l)
# Quantidade de arquivos a serem removidos
remove=$(expr $total - $qtde)
if [ $total -gt $qtde ]; then
# Arquivo temporario com a lista de arquivos de backup
file=/tmp/arqTemp$$
echo
echo "Arquivos de backup:"
echo -en "$bkp\n" | awk '{print$8}' | tee $file
echo
echo "Total de arquivos -> $total"
echo
echo "Removendo $remove arquivo(s)..."
sleep .3
echo
# Rotina para pegar o ultimo arquivo e efetuar a exclusao
q=1
for i in $(seq $remove); do
rm -v $(head -n$q $file | tail -n1)
let q++
sleep .2
done
# Exclusao do arquivo temprario
rm -f $file
else
echo
echo "Voce possui $qtde arquivos de backup ou menos..."
echo
ls -ltr "$Arq"_*
echo
fi
fi
echo
exit 0
[As partes desta mensagem que não continham texto foram removidas]