SCRIPT PARA REMOVER ARQUIVOS ANTIGOS E MANTER [RESOLVIDO]

1. SCRIPT PARA REMOVER ARQUIVOS ANTIGOS E MANTER [RESOLVIDO]

Carlos Sousa
Carloswms10

(usa Debian)

Enviado em 31/12/2021 - 19:29h

Olá, sou novo no mundo Linux, me perdoem se estou perguntando besteira.

Vamos lá!

Estou tentando criar um script que remova o arquivo mais antigo de dois diretórios específicos, caso a quantidade arquivos nestes diretórios seja maior que 4 arquivos.

Então eu criei assim:

#! /bin/bash
DIR1=$(ls /var/sftp/TESTE/ | wc -l)
DIR2=$(ls /var/sftp/TESTE2/ | wc -l)

if [ $DIR1 -gt 4 ];then

stat /var/sftp/TESTE/* --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm

elif [ $DIR2 -gt 4 ];then

stat /var/sftp/TESTE2/* --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm

fi


Primeiro problema: Executei o script no diretório em que o criei, O mesmo só apaga os arquivos do caminho "/var/sftp/TESTE/". Só apaga o arquivo do outro diretório se eu executar o script novamente, que não é meu intuito.

Segundo problema: Quando eu faço agendamento no crontab o script não funciona de nenhuma forma.

Alguém consegue me ajudar?

Lembrando mais uma vez: Sou iniciante no Linux.



  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/01/2022 - 03:09h

Carloswms10 escreveu:

Olá, sou novo no mundo Linux, me perdoem se estou perguntando besteira.

Vamos lá!

Estou tentando criar um script que remova o arquivo mais antigo de dois diretórios específicos, caso a quantidade arquivos nestes diretórios seja maior que 4 arquivos.

Então eu criei assim:

#! /bin/bash
DIR1=$(ls /var/sftp/TESTE/ | wc -l)
DIR2=$(ls /var/sftp/TESTE2/ | wc -l)

if [ $DIR1 -gt 4 ];then

stat /var/sftp/TESTE/* --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm

elif [ $DIR2 -gt 4 ];then

stat /var/sftp/TESTE2/* --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm

fi


Primeiro problema: Executei o script no diretório em que o criei, O mesmo só apaga os arquivos do caminho "/var/sftp/TESTE/". Só apaga o arquivo do outro diretório se eu executar o script novamente, que não é meu intuito.

Segundo problema: Quando eu faço agendamento no crontab o script não funciona de nenhuma forma.

Alguém consegue me ajudar?

Lembrando mais uma vez: Sou iniciante no Linux.

Quanto a apagar somente de um diretório, é devido ao condicional.
Se satisfaz a 1° condição, executa os comandos e termina, não vai para o elif.
Resumindo, os condicionais devem ser separados,
Visto que as condições são independentes.
Exemplo:

if [ $DIR1 -gt 4 ];then
stat /var/sftp/TESTE/* --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm
fi

if [ $DIR2 -gt 4 ];then
stat /var/sftp/TESTE2/* --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm
fi


Em tempo:
stat /var/sftp/TESTE2/* --printf='%Y %n\0' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm
Pega somente o 1º mais antigo.....

Simplificando:

#!/bin/bash
awk 'NR>4{system("rm "$9)}' <<< $(ls -lt /var/sftp/TESTE01/*.*)
awk 'NR>4{system("rm "$9)}' <<< $(ls -lt /var/sftp/TESTE02/*.*)

"Pega" o Registro > 4, e remove o arquivo, que é o campo 9, "system("rm "$9)"
ls -lt => lista por ordem de modificação.
Ou,
awk 'NR>4{system("rm "$1)}' <<< $(stat -c %n /var/sftp/TESTE01/*.*)

______________________________________________________________________
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
______________________________________________________________________


3. Re: SCRIPT PARA REMOVER ARQUIVOS ANTIGOS E MANTER [RESOLVIDO]

Carlos A. P. Cunha
Carlos_Cunha

(usa Linux Mint)

Enviado em 02/01/2022 - 17:28h

Olhando me parasse que vc esta complicando algo que possa ser feito mais fácil/rápido/simples usando find e suas opções atime/ctime/mtime, de uma olhada:




#-------------------------------------------------------------------------------------#
"Falar é fácil, me mostre o código." - Linus Torvalds
#-------------------------------------------------------------------------------------#







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts