Como deletar todos os arquivos que não são criados hoje

1

Eu quero delete all dos arquivos em uma pasta que não são criados hoje. Eu sei como obter a lista de arquivos que são criados hoje usando

find . -type f -mtime -1

Mas, não estou conseguindo obter a lista de todos os arquivos que não foram criados hoje. Basicamente eu tenho que encontrar se há arquivos com timestamp antigo, exceto hoje em uma pasta. Se presente eu tenho que apagar apenas os arquivos antigos.

    
por NJMR 02.05.2018 / 14:36

3 respostas

6
find . -type f -mtime +0 -exec rm -f {} +

ou

find . -type f ! -mtime -1 -exec rm -f {} +

Removeria os arquivos regulares cujo conteúdo foi modificado pela última vez há mais de 24 horas ( -mtime +0 significado: cujo idade em dias (arredondado para um inteiro, os dias são 24 horas ou 86400 Unix epoch second duration) é estritamente maior que 0).

Algumas implementações find têm um predicado -delete que você pode usar no lugar de -exec rm -f {} + , o que tornaria mais seguro e eficiente.

Para arquivos que foram modificados pela última vez antes das 00:00:00 de hoje, com GNU find , você pode adicionar o predicado -daystart . Isso incluirá os arquivos que foram modificados ontem mesmo se há menos de 24 horas.

Com algumas implementações de find , você também pode fazer:

find . ! -newermt 00:00:00 -delete

Para excluir arquivos que foram modificados pela última vez antes (ou exatamente) às 00:00:00 de hoje.

    
por 02.05.2018 / 14:48
1

Usando o zsh, seja nativamente ou via zsh -c "..." :

rm -f /path/to/folder/*(.m+0)     # for that directory only

rm -f /path/to/folder/**/*(.m+0)  # recursively

Os parentes ( ... ) criam um qualificador do zsh "glob ". Lá dentro, um ponto . especifica arquivos simples (semelhante ao find -type f ) e o m+0 exige que o arquivo tenha um tempo de modificação estritamente maior que zero dias, depois de truncado para dias inteiros - 23 horas é 0 dias; 25 horas seria 1 dia.

Para corresponder ainda mais de perto o comportamento padrão de find de encontrar / comparar arquivos "ocultos" (que começam com um ponto), adicione o qualificador de maiúscula D:

rm -f /path/to/folder/*(D.m+0)     # for that directory only

rm -f /path/to/folder/**/*(D.m+0)  # recursively
    
por 02.05.2018 / 18:54
0

find tem o parâmetro -not ou ! , o que nega aquele após e -delete para excluir os arquivos:

find . ! -mtime -1 -type f -delete

Observe que -not não é compatível com POSIX

    
por 02.05.2018 / 14:49