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