passa2 - Um sistema de backup/sincronização/cópia de arquivos em SHell Script
Publicado por Marcelo 22/11/2008
[ Hits: 6.811 ]
Homepage: sites.google.com/sites/foo4funreborn/
Este script automatiza a cópia de diretórios e arquivos para um pendrive (ou pasta) organizando-os por data e nome do host. Ele permite arquivar e restaurar tentando manter sempre a mesma estrutura de arquivos. Exemplo:
passa2 -config (na máquina 1)
passa2 -saveit /home/mbianchi/projetos/tese (na máquina 1)
passa2 -restore (na máquina 2)
#!/bin/bash ########################################################################## # This file is in UTF-8 # Este arquivo esta formatado em UTF-8 # Writen by Bianchi @ 2008 under GPL ## ##### Changelog # #0.5.0 - 31/08/2008 # # - Added the machine part to identify # in which machine the tar was created. # #0.3.0 - 15/03/2008 # # - Changed archive method. The tar file is created compressed directly on the pendrive # the info file is created at the directory that you invoked the passa2 script. # # - Every change and comments and user interaction should be made in english to give # a little chance for other people to use it. # # - Removed the option to compress the tar file, the file from now on are always compressed # with gzip # # - Added pre-startup check of need binaries # #0.2.7 - Sem chanelog .... ##### function about() { cat << EOF Passa2 - Version 0.5 Modo de Uso: passa2 [options] [FILE||DIRECTORY] Opções: -h|-about - Sobre (esta ajuda) -saveit - Salva um arquivo ou diretório para o diretório de arquivo -restore - Restaura um arquivo do diretório de arquivo -list - Lista os arquivos disponíveis no diretório de arquivos -config - Configura o script EOF } function termina() { #Final echo -e "\nI:> Done !" exit } function inicializa() { ans="" while [ ! -d "$ans" ] do echo "Entre com o nome do diretório a ser usado para arquivo ?" read ans export destd=$ans done } function loadconfig() { export v=0 for i in gzip gunzip tar mktemp awk sed cut basename dirname do [ ! -x "`which $i`" ] && echo "No $i program, can't run." && exit [ $v -eq 1 ] && echo "$i pronto !" done if [ -f ~/.passa2rc ] then source ~/.passa2rc else echo "Ooops sem arquivo de configuração." inicializa saveconfig loadconfig fi [ "Z$destd" = "Z" ] && echo "Diretório de transporte não definido, run config !" && exit [ ! -d $destd ] && echo "Diretório de transporte ($destd) não existe !" && exit } function saveconfig() { echo "export destd=$destd" > ~/.passa2rc } function getlistoffiles() { if [ "Z`ls -1 $destd/`" != "Z" ] then ls -1 $destd/* | sort fi } function listfiles() { n=1 echo -e "\n\e[0;31;1mArquivos existentes:\e[m" for i in `getlistoffiles` do nome=`basename $i .tar.gz` tamanho=`du -hs $i| awk '{print $1}'` ref=`echo $nome | awk -F"_" '{ if (NF == 3) {print $3} else {print $2}}'` machine=`echo $nome | awk -F"_" '{ if (NF == 3) {print $2} else {print "---"}}'` data=`echo $nome | awk -F"_" '{print $1}'` ano=`echo $data | cut -c1-4` dia=`echo $data | cut -c7-8` mes=`echo $data | cut -c5-6` hora=`echo $data | cut -d"-" -f 2 | awk '{print substr($1,1,2)":"substr($1,3,2)":"substr($1,5,2)}'` echo -e "\e[0;34;1m $n:\e[m $ref\t ($dia/$mes/$ano)-($hora) [$tamanho] (\e[0;32;1m${machine}\e[m) " n=$(( n + 1 )) done } ############## Real begin ######################################################################################### ######################################################################################### if [ "Z$1" = "Z-h" -o "Z$1" = "Z-about" ] then about termina fi ######################################################################################### ######################################################################################### if [ "Z$1" = "Z-config" ] then inicializa saveconfig loadconfig termina fi ######################################################################################### ######################################################################################### # Configuração Inicial, carregando preferencias loadconfig ######################################################################################### ######################################################################################### if [ "Z$1" == "Z-list" ] then listfiles termina fi ######################################################################################### ######################################################################################### if [ "Z$1" == "Z-saveit" ] then shift element=$1 if [ "Z$element" == "Z" ] then echo "Elemento não é válido !" exit fi from=`dirname $element` fromfilename=`basename $element` cd $from [ $? -eq 0 ] && realfrom=`pwd` || exit cd $realfrom # We do not accept .... [ -L $fromfilename ] && type="link" && echo "I:> Elemento é um dispositivo tipo LINK !" && exit [ -c $fromfilename ] && type="char" && echo "I:> Elemento é um dispositivo tipo CHAR !" && exit [ -b $fromfilename ] && type="block" && echo "I:> Elemento é um dispositivo tipo BLOCK!" && exit [ -p $fromfilename ] && type="pipe" && echo "I:> Elemento é um dispositivo tipo PIPE !" && exit # We accept ... [ -d $fromfilename ] && type="dir" && echo "I:> Elemento é um directório !" [ -f $fromfilename ] && type="file" && echo "I:> Elemento é um arquivo !" #Data do arquivo data=`date +%Y%m%d-%H%M%S` #Nome da máquina machine=`uname -n` if [ "Z${machine}" == "Z" ] then machine="UNK" fi #Gerando arquivo de informações (filesystem) export TMPDIR=. tmfile=`mktemp` unset TMPDIR cat << EOF > $tmfile #PASSA2AT export from=$from export fromfilename=$fromfilename export realfrom=$realfrom export type=$type export data=$data export machine=$machine EOF #Nome do arquivo tar tarfile=$destd/${data}_${machine}_${fromfilename}.tar.gz #Add the info file + path echo -e "I:> Adicionando ... \n" tar cvf - $tmfile $fromfilename | gzip -c > $tarfile #erasing tmfile rm $tmfile termina fi ######################################################################################### ######################################################################################### if [ "Z$1" == "Z-restore" ] then listfiles echo -n "Extract which file: " read ans f=`getlistoffiles | head -n $ans | tail -1` f=`basename $f` [ ! -f $destd/$f ] && echo "Where is the file: $f ?" && exit tempd=`mktemp -d` [ $? -ne 0 ] && echo "Error criating the temporary directory !" && exit echo "" echo "I:> Restoring: $f" cd $tempd 2> /dev/null [ $? -ne 0 ] && echo "Where is the temporary directory?" && exit echo "I:> Extracting" gunzip -c $destd/$f | tar xf - # Lendo o index indexfile=`ls -1 tmp.??????????` [ "Z$indexfile" == "Z" -o ! -f ${indexfile} ] && echo "Can't find index file" && exit echo -n "I:> Index file is: $indexfile: " if [ "Z`sed -ne '1p' $indexfile`" != "Z#PASSA2AT" ] then echo "Fail in `pwd`." exit else echo "Ok." source $indexfile echo " I:> Restaurando em: ($from) objeto: ($fromfilename) tipo: ($type)" fi if [ -d $realfrom ] then echo "I:> Usando caminho real: $realfrom" cd $realfrom else if [ -d $HOME/$from ] then echo " I:> Usando caminho absoluto de $HOME/$from" cd $HOME/$from else echo " E:> Não sei onde restaurar." echo " I:> OP1 -> $HOME/$from Não Existe." echo " I:> OP2 -> $realfrom Não Existe." echo " I:> Arquivo foi extraido em: $tempd, saindo agora." exit fi fi case "$type" in dir) echo " I:> Restaurando diretório: ($fromfilename)." if [ -e $fromfilename ] then echo " E:> Objeto existe, o que fazer?" echo " I:> Arquivo foi extraido em: $tempd, saindo agora." exit else res=`mv $tempd/$fromfilename . 2>&1` if [ $? -eq 0 ] then rm -rf $tempd echo -e " I:> Restauração concluida.\n" ls -l1d $fromfilename else echo " E:> Restauração falhou." echo " I:> Comando mv não conseguio mover de: $tempd/$fromfilename para `pwd`" echo " L:> Erro retornado pelo comando:" echo " $res" echo " I:> Arquivo foi extraido em: $tempd, saindo agora." exit fi fi ;; file) echo "Não sei restaurar arquivos." ;; *) echo "Opa !! Nao deveria acontecer tipo '*'." exit ;; esac termina fi ######################################################################################### ######################################################################################### # Você não forneceu nenhuma opção (mostrando a ajuda) about
cg_ext - script para alteração de extensão de arquivos em larga escala
Script para compilação manual do nessus
Verifica últimos arquivos criados
Identificar,matar e Iniciar novo Processo
Checar tamanho do Cache do Squid e limpar
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (5)
Linux Lite Demorando Muito Para Ligar (2)
Instalação do drive do adaptador wiffi (5)