Removendo arquivos com mais de 7 dias

43

Eu escrevo abaixo o comando para excluir todos os arquivos com mais de 7 dias, mas não funciona:

find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;

Como posso remover esses arquivos?

    
por Malihe Pakyari 24.02.2015 / 10:22

1 resposta

78

Como @Jos apontou, você perdeu um espaço entre name e '*.gz' ; também para acelerar o comando use a opção -type f para executar o comando apenas em f .

Então o comando fixo seria:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;

Explicação:

  • find : o comando unix para encontrar tintas f iles / d irectories / l e etc.
  • /path/to/ : o diretório para iniciar sua pesquisa.
  • -type f : só encontra arquivos.
  • -name '*.gz' : arquivos de lista que terminam com .gz .
  • -mtime +7 : considere apenas aqueles com tempo de modificação anterior a 7 dias.
  • -execdir ... \; : para cada resultado encontrado, faça o seguinte comando em ... .
  • rm -- '{}' : remova o arquivo; a parte {} é onde o resultado da busca é substituído pela parte anterior. -- significa que os parâmetros de fim de comando evitam erros de alerta para os arquivos que começam com hífen .

Como alternativa, use:

find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --

Em encontre o homem :

-print0 
      True; print the full file name on the standard output, followed by a null character 
  (instead of the newline character that -print uses). This allows file names that contain
  newlines or other types of white space to be correctly interpreted by programs that process
  the find output. This option corresponds to the -0 option of xargs.

O que é um pouco mais eficiente, porque equivale a:

rm file1 file2 file3 ...

ao contrário de:

rm file1; rm file2; rm file3; ...

como no método -exec .

Um comando alternativo e mais rápido é usando o + terminator do exec em vez de \; :

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +

Este comando executará rm apenas uma vez no final, em vez de cada vez que um arquivo for encontrado e este comando for quase tão rápido quanto usar a opção -delete da seguinte forma na moderna find :

find /path/to/ -type f -mtime +7 -name '*.gz' -delete
    
por αғsнιη 24.02.2015 / 11:14