• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Triton

[Python] Backup script

17 mensagens neste tópico

E aqui fica um pequeno script em Python que faz um backup automático em zip ou tar de directórios especificados pelo user! Também suporta uma adição de um comment.

Este código provém na maior parte do livro Byte of Python que explica o seu funcionamente na totalidade! Fiquem bem! :)

#!/usr/bin/python

import os, time

source = ['/home/triton/data', '/home/triton/bin']
# Se estas em Windows, usa antes source = [r'C:\Documentos', r'D:\Trabalhos'] ou uma coisa do genero

target_dir = '/mnt/e/backup/' # Pasta de destino

today = target_dir + time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')

comment = raw_input('Enter a comment --> ')
if len(comment) == 0:
target = today + os.sep + now + '.zip'
else:
target = today + os.sep + now + '_' + \
	comment.replace(' ', '_') + '.zip'

if not os.path.exists(today):
os.mkdir(today) # make directory
print 'Successfully created directory', today

zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
#se preferirem tar tirem o comment da proxima linha
#tar = 'tar -cvzf %s %s -X /home/triton/excludes.txt' % (target, ' '.join(srcdir))

if os.system(zip_command) == 0:
print 'Successful backup to', target
else:
print 'Backup FAILED'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito Bom Trabalho Mesmo sendo a maior parte retirada desse livro "Byte of Python" :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito fixe. Já estás mais à vontade com o python e realmente é possível fazer coisas interessantes. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Seria porreiro alterar esse script de forma a que aceitasse um argumento para se defenir se queremos fazer backup do default ou de outra pasta qualquer...

Eu explico melhor:

Ao correr o script, caso coloques um argumento do estilo

:~$python backup.py -xpto

import sys, os, time
...
if sys.argv == xpto #sys.argv tem a lista de argumentos passados pela linha de commandos
    pasta=raw_input('Indique a pasta pretendida:')
    ...
else
    ... script com as pastas defenidas por default.

Acho que o script assim seria bastante mais versátil. Caso queiras dá uma vista de olhas aqui

Por muito tentado que me sinto em experimentar alterar o script, tenho que me dedicar a PHP por uns tempos devido a um projecto que surgiu de repente. Só depois poderei voltar para python.

(Mas confesso que já tenho algumas saudades  de fazer experiências com python.  hehe... :P)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, tens toda a razão. Torna o script mais versátil... o que quero fazer é depois arranjar um GUI todo bonitinho para a aplicação!

ARGHHh, passaste para o PHP side :P Boa sorte, também tenho andado a aprofundar XHTML e CSS. Boa sorte!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ARGHHh, passaste para o PHP side :thumbsup: ...

Passei por pouco tempo. :P Não desisti do python! Especialmente depois de ver algures uma forma de passar os scripts e batch files manhosos que tenho nos servers para python. :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

PaLoBo pelo que me parece do code do triton ele fez aquele code para backup de uma pasta percisa, ou seja se tu quisesses outra tinhas de modifcar no code :cheesygrin:

Mas ya, se quisesses fazer uma cena mais 'user-friendly' era com a escolha do freguês :thumbsup:

Boa Sugestão :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O script como está está porreiro. Ele pode ter as duas opções. O script pode fazer backup de uma pasta especifica, mas imagina que quisesse fazer backup de uma pen drive, passava um argumento e voilá...

Não deve ser muito dificil modificar. O script pode ficar essencialmente como está, teria apenas que colocar uma condição para testar se havia ou não argumentos, validar os argumentos e depois pedir ao user a pasta desejada...

Se me fartar um pouco de PHP tento ver isso. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Épa, Triton eu precisava de um script desses mas era para o servidor que montei aqui na loja, que tá em linux! Vou ver se fasso isso versão linux :thumbsup:

É nisto que dá nao ler o código antes de postar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hey tive a dar uma olhada no código e ele podia ser melhorado desta maneira:

#!/usr/bin/python

import os, time

print """
MENU:
  0 - Default
  ou
  Número de pastas a adicionar
"""

input = raw_input("Escolha a opcao: ")
counter = 0

if input == 0
source = ['/home/triton/data', '/home/triton/bin']
# Se estas em Windows, usa antes source = [r'C:\Documentos', r'D:\Trabalhos'] ou uma coisa do genero
else
while counter <= input
	#Aqui colocar um input para adicionar pastas
	#Insira pasta 1: 
	#Insira pasta 2: 
	counter = counter + 1

target_dir = '/mnt/e/backup/' # Pasta de destino

today = target_dir + time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')

comment = raw_input('Enter a comment --> ')
if len(comment) == 0: 
target = today + os.sep + now + '.zip'
else:
target = today + os.sep + now + '_' + \
	comment.replace(' ', '_') + '.zip'

if not os.path.exists(today):
os.mkdir(today) # make directory
print 'Successfully created directory', today

zip_command = "zip -qr '%s' %s" % (target, ' '.join(source))
#se prefirem tar tirem o comment da proxima linha
#tar = 'tar -cvzf %s %s -X /home/triton/excludes.txt' % (target, ' '.join(srcdir))

if os.system(zip_command) == 0:
print 'Successful backup to', target
else:
print 'Backup FAILED'

E depois daquele while ele fazer uma verificação com o os.path para saber se todos os ficheiros existem!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Criei uma versão simplificada do programa para windows, já que o teu script (a mim) dava erros principalmente por causa do comando zip. Este script apenas copia ficheiros para uma pasta com a data , nada de comentarios nem compressão.

import os, time

#Só para dar a sencação de contolo
input = raw_input("Iniciar: ")

#De onde vem os ficheiros
source = "C:\\teste"

today = time.strftime('%Y%m%d')

#Pasta onde irão ser gravados os ficheiros
target = "C:\Backup\Backup" + today

if not os.path.exists(target):
os.mkdir(target) # make directory
print 'Foi criada a pasta ', target

copy_command = "copy %s %s" % (source, target)

if os.system(copy_command) == 0:
print 'Backup bem sucedido na pasta ', target
else:
print 'Backup Falhou'
#Para poder ver o que está mal caso dê erro
print copy_command

#Para poder ver os resultados na linha de comandos
raw_input("Fim")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma coisa LuRsT, ou fazes escape correcto das \, ou usas /. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas djthyrax, esse script não me deu erros e é muito estranho usar \ para o windows. Como fazer o escape correcto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tava a falar desta linha: target = "C:\Backup\Backup" + today

Tu deverias usar: target = "C:\\Backup\\Backup" + today ou target = "C:/Backup/Backup" + today

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tava a falar desta linha: target = "C:\Backup\Backup" + today

Tu deverias usar: target = "C:\\Backup\\Backup" + today ou target = "C:/Backup/Backup" + today

Ou então simplesmente target = r"C:\caminho\para\a\pasta".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora