shell-script-pt
[Top][All Lists]
Advanced

[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]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]