Neste artigo, veremos como automatizar o backup com um script Python.

Os backups de arquivos são essenciais para preservar seus dados no armazenamento local. Nós vamos usar o shutil , OS , e sys módulos. Nesse caso, o módulo shutil é usado para copiar dados de um arquivo para outro, enquanto os módulos os e sys são usados ​​para obter o caminho do diretório e assim por diante.

Implementação Stepwise:

Etapa 1:  importe os seguintes módulos

import shutil
from datetime import date
import os
import sys

Etapa 2: vamos agora obter a data de hoje usando o módulo datetime.

today = date.today()
date_format = today.strftime("%d_%b_%Y_")

Etapa 3: se o usuário especificar o caminho para o arquivo de origem, use a linha abaixo para concatenar o caminho para o arquivo de origem com o nome do arquivo de origem.

src_dir = src_dir+src_file_name

Caso contrário, e seu arquivo estiver armazenado no mesmo diretório que seu script Python atual, use o módulo os para determinar o caminho atual do arquivo e crie o diretório de origem combinando o caminho fornecido pelo módulo os com o nome do arquivo de origem.

os.chdir(sys.path[0])

Etapa 4: Se o usuário não especificar o nome do arquivo de origem, devemos retornar um erro de arquivo não existe.

if not src_file_name:
   print("Please give atleast the Source File Name")

Etapa 5: Agora, use os seguintes casos para testar as condições necessárias.

Se o usuário fornece todos os insumos, tais como o nome da fonte de arquivo , caminho do arquivo fonte , nome do arquivo de destino e caminho do arquivo de destino .

if src_file_name and dst_file_name and src_dir and dst_dir:
     src_dir = src_dir+src_file_name
     dst_dir = dst_dir+dst_file_name

Se o nome do arquivo de destino for Nenhum, o que indica que o usuário não especificou um nome de arquivo de destino, use as condições listadas abaixo.

elif dst_file_name is None or not dst_file_name:
       dst_file_name = src_file_name
       dst_dir = dst_dir+date_format+dst_file_name

Se um usuário inserir uma string vazia com um ou mais espaços.

elif dst_file_name.isspace():
      dst_file_name = src_file_name
      dst_dir = dst_dir+date_format+dst_file_name

Se o usuário inserir o nome da cópia de backup, apenas concatene o diretório de destino , a data e o nome do arquivo de destino para criar o nome do arquivo de saída.

else:
      dst_dir = dst_dir+date_format+dst_file_name

Etapa 6: Por fim, simplesmente precisamos usar a função shutil para copiar o arquivo para o destino.

shutil.copy2(src_dir, dst_dir)

Nota: Se quisermos fazer backup de toda a pasta em vez de arquivos individuais, devemos usar o código abaixo.

shutil.copytree(src_file_name, dst_dir)

Abaixo está a implementação completa:

# Import the following modules
import shutil
from datetime import date
import os
import sys
  
# When there is need, just change the directory
os.chdir(sys.path[0])  
  
# Function for performing the
# backup of the files and folders
def take_backup(src_file_name, 
                dst_file_name=None,
                src_dir='', 
                dst_dir=''):
    try:
        
          # Extract the today's date
        today = date.today()  
        date_format = today.strftime("%d_%b_%Y_")
  
        # Make the source directory,
        # where we wanna backup our files
        src_dir = src_dir+src_file_name
  
        # If user not enter any source file,
        # then just give the error message...
        if not src_file_name:
            print("Please give atleast the Source File Name")
            exit()
  
        try:
            
            # If user provides all the inputs
            if src_file_name and dst_file_name and src_dir and dst_dir:
                src_dir = src_dir+src_file_name
                dst_dir = dst_dir+dst_file_name
                  
            # When User Enter Either 
            # 'None' or empty String ('')
            elif dst_file_name is None or not dst_file_name:
                dst_file_name = src_file_name
                dst_dir = dst_dir+date_format+dst_file_name
                  
            # When user Enter an empty
            # string with one or more spaces (' ')
            elif dst_file_name.isspace():
                dst_file_name = src_file_name
                dst_dir = dst_dir+date_format+dst_file_name
                  
            # When user Enter an a
            # name for the backup copy
            else:
                dst_dir = dst_dir+date_format+dst_file_name
  
            # Now, just copy the files
            # from source to destination
            shutil.copy2(src_dir, dst_dir)
  
            print("Backup Successful!")
        except FileNotFoundError:
            print("File does not exists!,\
            please give the complete path")
      
    # When we need to backup the folders only...
    except PermissionError:  
        dst_dir = dst_dir+date_format+dst_file_name
          
        # Copy the whole folder
        # from source to destination
        shutil.copytree(src_file_name, dst_dir)
  
# Call the function
take_backup("GFG.txt")

Saída:

Backup de pastas:

 Atenção geek! Fortaleça suas bases com o Python Programming Foundation Course e aprenda o básico.