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?
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?
Respostas:
Como o @Jos apontou, você perdeu um espaço entre name
e '*.gz'
; também para acelerar o uso de comando -type f
opção para executar o comando em f iles somente.
Portanto, o comando fixo seria:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find
: O comando UNIX para encontrar f iles / d irectories / l tintas e etc./path/to/
: o diretório para iniciar sua pesquisa.-type f
: encontre apenas arquivos.-name '*.gz'
: lista os arquivos que terminam com .gz
.-mtime +7
: considere apenas aqueles com tempo de modificação superior a 7 dias.-execdir ... \;
: para cada resultado encontrado, execute 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 o erro dos arquivos iniciados com hífen .find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
Do homem encontre :
-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 ...
em oposição a:
rm file1; rm file2; rm file3; ...
como no -exec
método
Um comando alternativo e também mais rápido é usar o +
terminador do exec em vez de\;
:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
Este comando será executado rm
apenas uma vez no final, em vez de cada vez que um arquivo for encontrado e esse comando é quase tão rápido quanto usar a -delete
opção como a seguir find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
no final? Por que mexer com o +
ou \;
?
Cuidado ao remover arquivos com o find. Execute o comando com -ls para verificar o que você está removendo
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
. Em seguida, retire o comando do histórico e acrescente-exec rm {} \;
Limite o dano que um comando find pode causar. Se você deseja remover arquivos de apenas um diretório, -maxdepth 1
impede a localização de percorrer subdiretórios ou de pesquisar no sistema completo se você digitar /media/bkfolder /
.
Outros limites que adiciono são argumentos de nome mais específicos -name 'wncw*.gz'
, como adicionar um horário mais recente -mtime -31
e citar os diretórios pesquisados. Isso é particularmente importante se você estiver automatizando as limpezas.
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
name
e'*.gz'
.