Como localizar e excluir arquivos mais antigos que dias específicos no unix?

36

Eu tenho uma pasta para log com 7 pastas. Essas sete pastas também possuem subpastas e essas subpastas também têm subpastas. Eu quero excluir todos os arquivos com mais de 15 dias em todas as pastas, incluindo subpastas, sem tocar na estrutura da pasta, o que significa apenas arquivos.

mahesh@inl00720:/var/dtpdev/tmp/ > ls
A1  A2  A3  A4  A5  A6  A7

mahesh@inl00720:/var/dtpdev/tmp/A1/ > ls
B1 B2 B3 B4 file1.txt file2.csv
    
por gtaware 12.09.2014 / 08:38

2 respostas

49

Você pode começar dizendo find /var/dtpdev/tmp/ -type f -mtime +15 . Isto irá encontrar todos os arquivos com mais de 15 dias e imprimir seus nomes. Opcionalmente, você pode especificar -print no final do comando, mas essa é a ação padrão. É aconselhável executar o comando acima primeiro, para ver quais arquivos estão selecionados.

Depois de verificar se o comando find está listando os arquivos que você deseja excluir (e nenhum outro), você pode adicionar uma "ação" para excluir os arquivos. As ações típicas para fazer isso são:

  1. -exec rm -f {} \; (ou, equivalentemente, -exec rm -f {} ';' )
    Isso executará rm -f em cada arquivo; por exemplo,

    rm -f /var/dtpdev/tmp/A1/B1; rm -f /var/dtpdev/tmp/A1/B2; rm -f /var/dtpdev/tmp/A1/B3; …
    
  2. -exec rm -f {} +
    Isso executará rm -f em muitos arquivos de uma vez; por exemplo,

    rm -f /var/dtpdev/tmp/A1/B1 /var/dtpdev/tmp/A1/B2 /var/dtpdev/tmp/A1/B3 …
    

    então pode ser um pouco mais rápido que a opção 1. (Pode ser necessário executar rm -f algumas vezes se você tiver milhares de arquivos.)

  3. -delete
    Isso diz ao próprio find para excluir os arquivos, sem executar rm . Isso pode ser infinitesimalmente mais rápido que as variantes -exec , mas não funcionará em todos os sistemas.

Então, se você usar a opção 2, o comando inteiro será:

find /var/dtpdev/tmp/ -type f -mtime +15 -exec rm -f {} +
    
por 12.09.2014 / 08:47
-1

Ou faça isso com um loop:

for x in $(find /var/dtpdev/tmp/ -type f -mtime +15); do rm "$x"; done
    
por 14.08.2015 / 14:44

Tags