Copiar o último arquivo de backup considerando o mês

1. Copiar o último arquivo de backup considerando o mês

Icaro Gustavo Silva dos Santos
gustavo777

(usa Ubuntu)

Enviado em 08/02/2023 - 17:08h

Boa tarde galera!

Estou me aventurando com o shell scripting e estou curtindo bastante as possibilidades que ele traz. Agora estou tentando criar um script que copie para uma pasta destino apenas o último arquivo de backup de um determinado mês para a pasta origem. Podem me ajudar?

Desde já agradeço a força!



  


2. Re: Copiar o último arquivo de backup considerando o mês

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 08/02/2023 - 17:08h

Olá,

Ficamos felizes em ouvir você está desfrutando do shell scripting. Aqui vão algumas orientações que o ajudarão a copiar o último arquivo de backup de determinado mês:

1. Primeiro, utilize o comando "ls" para listar os arquivos da pasta origem:

$ ls

2. Utilize o comando "grep" para filtrar os arquivos que foram realizados no mês desejado, por exemplo para filtrar os arquivos do mês de maio:

$ ls | grep 'maio'

3. Para verificar qual foi o último arquivo de backup criado no mês de maio, utilize o comando "tail" com a opção "-1", que se refere a última linha:

$ ls | grep 'maio' | tail -1

4. Para copiar o arquivo para o destino desejado, utilize o comando "cp":

$ cp [arquivo_encontrado] [é possível utilizar o endereço de pasta de destino aqui]

Certifique-se de que tem as devidas permissões para executar os comandos no terminal. Esperamos que esta informação ajude, boa sorte com seu script!


3. Re: Copiar o último arquivo de backup considerando o mês

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 08/02/2023 - 18:14h


gustavo777 escreveu:

Boa tarde galera!

Estou me aventurando com o shell scripting e estou curtindo bastante as possibilidades que ele traz.
Agora estou tentando criar um script que copie para uma pasta destino apenas o último arquivo de backup de um determinado mês para a pasta origem.
Podem me ajudar?

Desde já agradeço a força!
Boa noite Gustavo.
Sugestões:
O comando:
ls -1t, lista ordenado por data
Para filtrar por mês, use o grep ou o awk.
Com awk é mais prático, printa só o campo desejado.
Exemplo:
ls -lt /Diretorio/Origem/|awk '$6~/jan/{print $9;exit}'
Obs.: Caso coloque o mês numa var, faça:
mes="jan";
ls -lt /Diretorio/Origem/|awk '$6~/'${mes}'/{print $9;exit}' #var $mes entre aspas SIMPLES

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



4. Re: Copiar o último arquivo de backup considerando o mês

Paulo
paulo1205

(usa Ubuntu)

Enviado em 08/02/2023 - 22:02h

A inteligência tem de ficar o script?

A pergunta é pelo seguinte: se os back-ups diários são feitos via tarefa no crontab, também uma tarefa no crontab agendada para o último dia de cada mês ou para o primeiro dia do mês seguinte poderia ser agendada para fazer a cópia do arquivo, com isso possivelmente facilitando a lógica de identificar qual seria o arquivo a ser copiado.

Claro que há outras formas de fazer, inclusive de forma completamente independente de como os arquivos são gerados. Essas soluções independentes são mais gerais, mas necessariamente terão de ser mais inteligentes, e terão de ser mais sofisticadas quanto mais aptas forem de identificar exceções (por exemplo: se a máquina estava off-line no momento do back-up/i] do último dia do mês anterior, o [i]script tem de tentar pegar o último que estiver disponível, ou simplesmente se ignora a cópia?).

Também fatores ambientais podem facilitar ou dificultar o processo. Por exemplo: se o nome do arquivo incluir a data de realização do back-up, isso pode facilitar a lógica de detecção, e se a data for num formato yyyymmdd (ano, mês, dia) será ainda mais fácil do que se for ddmmyyyy (dia, mês, ano) ou mmddyyyy (mês, dia, ano). E, também, dependendo desses fatores ambientais, usar ls pode ser uma boa ideia, mas também pode não ser tão boa assim (por exemplo: se houver muitos (da ordem de milhares para cima) arquivos no diretório de origem), podendo ser melhor usar algo como o find em seu lugar.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


5. Re: Copiar o último arquivo de backup considerando o mês

Icaro Gustavo Silva dos Santos
gustavo777

(usa Ubuntu)

Enviado em 10/02/2023 - 10:05h


alexabolada escreveu:

Olá,

Ficamos felizes em ouvir você está desfrutando do shell scripting. Aqui vão algumas orientações que o ajudarão a copiar o último arquivo de backup de determinado mês:

1. Primeiro, utilize o comando "ls" para listar os arquivos da pasta origem:

$ ls

2. Utilize o comando "grep" para filtrar os arquivos que foram realizados no mês desejado, por exemplo para filtrar os arquivos do mês de maio:

$ ls | grep 'maio'

3. Para verificar qual foi o último arquivo de backup criado no mês de maio, utilize o comando "tail" com a opção "-1", que se refere a última linha:

$ ls | grep 'maio' | tail -1

4. Para copiar o arquivo para o destino desejado, utilize o comando "cp":

$ cp [arquivo_encontrado] [é possível utilizar o endereço de pasta de destino aqui]

Certifique-se de que tem as devidas permissões para executar os comandos no terminal. Esperamos que esta informação ajude, boa sorte com seu script!


Bom dia @alexabolada! Obrigado pelo feedback!

Sabe me dizer como eu poderia adaptar o código para rodar em uma rotina mensal?


6. Re: Copiar o último arquivo de backup considerando o mês

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 10/02/2023 - 10:06h

Olá! \r\n\r\nSim, é possível automatizar esse processo usando tarefas agendadas. Uma maneira de fazer isso é através do cron. Para configurar, você precisará criar um arquivo de script para o comando que deseja executar (por exemplo, o comando \"cp\" para realizar a cópia do arquivo). Esse arquivo será executado por um daemon do cron (ou seja, um programa que é executado em segundo plano) no intervalo de tempo desejado. \r\n\r\nPor exemplo, se você quiser copiar o arquivo de backup todos os dias do mês, crie um arquivo de script, que contém: \r\n\r\n
#!/bin/bash \r\n# Copiar arquivo de backup \r\n\r\ndata=$(date +'%m) \r\n\r\nls | grep $data | tail -1 | cp -t [endereço_da_pasta_de_destino] \r\n 
\r\n\r\nEm seguida, configure o cron para que ele execute a tarefa todos os dias:\r\n\r\n# editar a linha a seguir para especificar a hora/minuto para a execução do script \r\n0 0 * * * [caminho_para_o_script] \r\n\r\n\r\nCom isso, o cron executará o script todos os dias na hora especificada, realizando a cópia do arquivo de backup.\r\n\r\nEspero que isso ajude!


7. Re: Copiar o último arquivo de backup considerando o mês

Icaro Gustavo Silva dos Santos
gustavo777

(usa Ubuntu)

Enviado em 10/02/2023 - 11:52h


msoliver escreveu:


gustavo777 escreveu:

Boa tarde galera!

Estou me aventurando com o shell scripting e estou curtindo bastante as possibilidades que ele traz.
Agora estou tentando criar um script que copie para uma pasta destino apenas o último arquivo de backup de um determinado mês para a pasta origem.
Podem me ajudar?

Desde já agradeço a força!
Boa noite Gustavo.
Sugestões:
O comando:
ls -1t, lista ordenado por data
Para filtrar por mês, use o grep ou o awk.
Com awk é mais prático, printa só o campo desejado.
Exemplo:
ls -lt /Diretorio/Origem/|awk '$6~/jan/{print $9;exit}'
Obs.: Caso coloque o mês numa var, faça:
mes="jan";
ls -lt /Diretorio/Origem/|awk '$6~/'${mes}'/{print $9;exit}' #var $mes entre aspas SIMPLES

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________


Bom dia @msoliver !

Esqueci de citar alguns pontos:

> As arquivos de backup ficam em uma pasta e não são separados por mês (ou seja, pode ser que nesta parte sejam criados arquivos mais atuais);
> Os backups não são feitos aos fins de semana;
> Pretendo colocar essa rotina no crontab.

Desde já, agradeço a ajuda!


8. Re: Copiar o último arquivo de backup considerando o mês

Icaro Gustavo Silva dos Santos
gustavo777

(usa Ubuntu)

Enviado em 10/02/2023 - 12:02h


paulo1205 escreveu:

A inteligência tem de ficar o script?

A pergunta é pelo seguinte: se os back-ups diários são feitos via tarefa no crontab, também uma tarefa no crontab agendada para o último dia de cada mês ou para o primeiro dia do mês seguinte poderia ser agendada para fazer a cópia do arquivo, com isso possivelmente facilitando a lógica de identificar qual seria o arquivo a ser copiado.

Claro que há outras formas de fazer, inclusive de forma completamente independente de como os arquivos são gerados. Essas soluções independentes são mais gerais, mas necessariamente terão de ser mais inteligentes, e terão de ser mais sofisticadas quanto mais aptas forem de identificar exceções (por exemplo: se a máquina estava off-line no momento do back-up/i] do último dia do mês anterior, o [i]script tem de tentar pegar o último que estiver disponível, ou simplesmente se ignora a cópia?).

Também fatores ambientais podem facilitar ou dificultar o processo. Por exemplo: se o nome do arquivo incluir a data de realização do back-up, isso pode facilitar a lógica de detecção, e se a data for num formato yyyymmdd (ano, mês, dia) será ainda mais fácil do que se for ddmmyyyy (dia, mês, ano) ou mmddyyyy (mês, dia, ano). E, também, dependendo desses fatores ambientais, usar ls pode ser uma boa ideia, mas também pode não ser tão boa assim (por exemplo: se houver muitos (da ordem de milhares para cima) arquivos no diretório de origem), podendo ser melhor usar algo como o find em seu lugar.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)


Bom dia @paulo1205!

Vou tentar detalhar melhor rs:

Atualmente, existe uma pasta que recebe arquivos de backup (criados por uma rotina no crontab) e, nesta
mesma pasta, outra rotina faz a exclusão de arquivos antigos, deixando apenas os 5 mais recentes (outra rotina diária
no crontab).

Agora eu quero pegar o último arquivo gerado em um mês e salvá-lo em uma pasta mensal (isso por rotina via crontab)
, entretanto os arquivos não são criados aos fins de semana.



9. Re: Copiar o último arquivo de backup considerando o mês

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/02/2023 - 19:14h

gustavo777 escreveu:


msoliver escreveu:


gustavo777 escreveu:

Boa tarde galera!

Estou me aventurando com o shell scripting e estou curtindo bastante as possibilidades que ele traz.
Agora estou tentando criar um script que copie para uma pasta destino apenas o último arquivo de backup de um determinado mês para a pasta origem.
Podem me ajudar?

Desde já agradeço a força!
Boa noite Gustavo.
Sugestões:
O comando:
ls -1t, lista ordenado por data
Para filtrar por mês, use o grep ou o awk.
Com awk é mais prático, printa só o campo desejado.
Exemplo:
ls -lt /Diretorio/Origem/|awk '$6~/jan/{print $9;exit}'
Obs.: Caso coloque o mês numa var, faça:
mes="jan";
ls -lt /Diretorio/Origem/|awk '$6~/'${mes}'/{print $9;exit}' #var $mes entre aspas SIMPLES

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Bom dia @msoliver !

Esqueci de citar alguns pontos:

> As arquivos de backup ficam em uma pasta e não são separados por mês (ou seja, pode ser que nesta parte sejam criados arquivos mais atuais);
> Os backups não são feitos aos fins de semana;
> Pretendo colocar essa rotina no crontab.

Desde já, agradeço a ajuda!

Boa noite Gustavo.
Me referi ao "mês", pq na saída do ls -lt, consta o mês.
-rw-r--r-- 1 user group 12628 fev 9 21:25 arquivo.html
A rotina que vai implementar deverá ser executada no 1º dia útil do mês,
é o comando sugerido, retorma o último arquivo do mês anterior,
logicamente, filtrando pelo mês anterior....
---------------------------------------------------------------------------------

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts