technology

Como encontrar e excluir arquivos com mais de X dias no Linux

.

Como você sabe, às vezes os dumps de log são compartilhados entre os usuários para processamento adicional. Algumas pessoas armazenam o log para uso posterior, mesmo após a conclusão do trabalho.

Em vez de se tornar útil, tornou-se um grande lixo, que precisa ser removido do sistema.

Quando você olha para o arquivo, há um grande número de arquivos disponíveis e, entre eles, você está procurando remover o arquivo que é X dias mais antigo, ou talvez X vezes mais antigo, do que quando você acessou ou modificou o arquivo pela última vez.

Se você tiver um tipo semelhante de requisito, acredito que este artigo certamente o ajudará.

Qual comando você usa para esta tarefa?

Nesse tipo de cenário, a melhor opção é utilizar o comando find, que primeiro localizará o arquivo de acordo com uma das seguintes opções: -amin, -atime, -cmin, -ctime, -mmin, e -mtime.

Depois que o comando find encontrar o arquivo de acordo com os parâmetros definidos, você poderá usar o -delete opção ou então use xargs para remover o arquivo do seu sistema.

Bem simples, certo? Vamos pegar alguns dos comandos baseados em cenários.

Localizar e excluir arquivos com mais de X ou N dias

Digamos que eu queira encontrar e remover um arquivo que não usei por mais de sete dias. Neste caso, eu diria -atime é a hora da necessidade, então deixe-me apresentá-lo primeiro à sintaxe de comando. Em seguida, invocaremos o comando no sistema.

$ find /specify-path/ -atime +N
  • find : todos vocês estão bem cientes do programa find
  • /specify/path/ : defina o caminho onde você deseja executar o comando find
  • -atime : o arquivo foi acessado há menos de, mais de ou exatamente 24 horas atrás
  • +N : mencione o número de dias no formato do dia

O comando acima mostrará o nome do arquivo que não foi acessado por mais de N número de dias.

Se você tiver certeza do comportamento do comando acima, precisará adicionar mais algumas linhas ao comando padrão para executar o função rm no resultado filtrado, e assim que o arquivo for excluído do sistema, seus nomes de arquivo serão impressos.

$ find /specify-path/ -atime +N -exec rm {} ; -print

É sempre recomendável que você verifique primeiro o resultado do comando find e, depois disso, execute a função rm para evitar qualquer perda de dados.

Para explicar melhor para você, deixe-me criar alguns arquivos com mais de 7 dias usando o touch comando. O comando touch normalmente é usado para criar um novo arquivo, mas você também pode usá-lo para alterar os tempos de acesso e modificação.

No entanto, podemos fazer isso com nosso arquivo antigo, mas em vez de fazer isso, ele crie um novo arquivo usando o -t (timestamp) usando o comando a seguir.

$ touch -t 202208281024 sample_A
$ touch -t 202208291024 sample_B
$ touch -t 202208301024 sample_C
$ touch -t 202208311024 sample_D
$ touch -t 202209011024 sample_E
$ touch -t 202209021024 sample_F
$ touch -t 202209031024 sample_G
$ touch -t 202209041024 sample_H

Se você quiser aprender a decodificar o carimbo de data/hora, confira este artigo:

Depois disso, execute uma parte do comando para ver os nomes dos arquivos e, quando estiver satisfeito com os nomes dos arquivos, adicione a outra parte do comando para ver os resultados.

$ find . -atime +7

Abaixo está a saída do comando acima.

Resultado desejado

Se você quiser ter mais certeza sobre a saída, você pode usar o stat comando para verificar o último horário de acesso executando o comando abaixo:

Verifique o resultado usando o comando stat
Verifique o resultado usando o comando stat

Uma vez que você tenha certeza do resultado, você pode executar o comando para remova o arquivo do seu sistema usando o comando abaixo, que encontrará novamente o nome do arquivo com base em sua linha do tempo, removerá o arquivo e imprimirá o nome do arquivo.

$ find . -atime +7 -exec rm {} ; -print

O comportamento do comando acima:

Remover arquivo que não foi acessado por mais de 7 dias
Remova arquivos que não foram acessados ​​por mais de 7 dias

Você pode tornar o comando acima mais robusto adicionando o tipo de arquivo.

Como você sabe, estamos procurando por arquivos regulares que não foram usados ​​por mais de 7 dias, e não quero tocar em nenhum diretório que não tenha sido acessado em uma semana. Nesse caso, definitivamente preciso mencionar explicitamente o tipo de arquivo.

$ find . -atime +7 -type f -exec rm {} ; -print

Alternativamente, você também pode usar o -newerXY opção para remover um arquivo com base na data especificada. XY precisa ser substituído pelos seguintes caracteres: 'a'(Acesso),'B'(nascimento),'c'(mudança de inode),'m'(modificado),'t'(Tempo) referência.

Você pode seguir a sintaxe abaixo para remover um arquivo com base em sua preferência usando o formato de data normal.

$ find /specify-path/ -type f -not -newerat "YYYY-MM-DD HH:MI:SS" -delete -print

Digamos que eu queira remover todos os arquivos que foram acessados ​​antes 31-08-2022 usando o -não e -novo opções.

Para este cenário, criei um comando que parece perfeito para mim. Eu sei que você está perguntando sobre o tempo, mas você pode evitar isso.

$ find . -not -newerat "2022-08-31" -delete -print

O comportamento do comando acima.

Excluir arquivo usando -newerXY
Exclua o arquivo usando -newerXY

Localizar e excluir arquivo que foi modificado em X minutos

Pode haver um momento em que você deseja remover arquivos com base no horário modificado, como remover todos os arquivos do diretório atual que foram acessados ​​nos últimos X minutos.

Digamos que eu queira remover os arquivos que foram modificados nos últimos 30 minutos. Nesse momento, você deve executar o comando abaixo, que excluirá todos os arquivos que foram modificados recentemente.

$ find . -mmin -30 -type f -delete -print

O comportamento do comando acima.

Exclua o arquivo que foi modificado em 30 minutos
Exclua o arquivo que foi modificado em 30 minutos

Em vez de remover diretamente o arquivo, você pode primeiro verificar o resultado do comando find invocando o código abaixo. Depois disso, você pode invocar o comando acima para remover o arquivo.

$ find . -mmin -30 

Você pode até mesmo tornar seu resultado de saída conciso usando –mmin como condicional, mas como posso fazer –mmin como condicional? É simples vamos dar um exemplo.

Digamos que você queira encontrar um arquivo que foi modificado nos últimos 50 minutos do período de tempo e, no mesmo período, também queira saber qual arquivo foi modificado recentemente em 30 minutos.

Nesse caso, você deve usar o seguinte comando:

$ find . -mmin -50 -mmin +30

O comportamento do comando acima.

Excluir arquivo usando várias condições de tempo
Excluir arquivos usando várias condições de tempo

Encontre e exclua arquivos com mais de X dias com um prompt

Não é seguro correr para executar rm ou use o -delete opção até ter certeza se o find the result encontrou o resultado certo para você.

E é comum cometermos erros ao digitar o nome do arquivo ou usar os parâmetros errados, o que removerá todos os arquivos do atual e dos subdiretórios porque o comando find verifica o padrão especificado recursivamente em todo o caminho especificado.

Acredito que você entendeu o que quero dizer. Portanto, é melhor primeiro verificar o resultado usando -imprimir, ou então você pode usar o comando abaixo, que pedirá sua permissão antes de removê-lo do seu sistema.

$ find . -atime +7 -exec rm -i {} ; -print

O comportamento do comando acima.

Excluir o arquivo após a confirmação
Excluir o arquivo após a confirmação

Embrulhar

É tudo por agora!

Bem, neste artigo você aprendeu como encontrar e remover um arquivo que não é acessado há muito tempo usando -atime e outras várias opções.

Você pode aprender mais sobre o comando find no manual, que pode ser lido no terminal digitando o comando simples man find.

Se este artigo te ajudou, deixe um comentário sobre sua experiência. Com isso, estou encerrando este artigo. Voltaremos a nos encontrar com um novo tema. Até lá, Tchau Tchau!

.

Mostrar mais

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo