Localizando arquivos com mais de x dias em um sistema com uma busybox despojada

9

Preciso encontrar e excluir arquivos com mais de uma semana na unidade de desenvolvimento. Existem utilitários com número limitado disponíveis nesta unidade. -mtime findO predicado de não está disponível. Como verifico todos os arquivos com mais de x dias neste caso?

Ravi
fonte
2
Não está claro o que você quer dizer com " mtimenão está disponível". Não é um utilitário cujo nome reconheço.
Kusalananda
/ caminho / para / minha / pasta $ find -type f -mtime +7 delete find: unrecognized: -mtime
Ravi
compartilhe a distribuição do linux que você está usando.
Siva
3
Parece que é o busybox construído sem FEATURE_FIND_MTIME. Está FEATURE_FIND_NEWERhabilitado? Funciona find -newer? A sua testutilidade ou o [builtin do seu shapoio -nt?
Stéphane Chazelas
1
Você pode contornar isso se puder usá-los touch -d/ date +%se[ file -nt other-file ]
Stéphane Chazelas

Respostas:

11

-mtimeé um predicado padrão de find(ao contrário de -delete), mas parece que você possui uma versão simplificada de busyboxonde o FEATURE_FIND_MTIMErecurso foi desativado no momento da criação.

Se você pode reconstruir o busybox com ele ativado, você poderá:

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

Ou se FEATURE_FIND_DELETEtambém estiver ativado:

find . -mtime +6 -type f -delete

Caso contrário, outras opções podem ser usadas find -newer(supondo que FEATURE_FIND_NEWEResteja ativado) em um arquivo configurado para ter um tempo de modificação de uma semana.

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -newer ../ref -exec rm -f {} +

Ou se -newernão está disponível, mas shé [suportes -nt:

touch -d "@$(($(date +%s) - 7 * 86400))" ../ref &&
  find . ! -type f -exec sh -c '
    for f do
      [ "$f" -nt ../ref ] || printf "%s\0" "$f"
    done' sh {} + |
    xargs -0 rm -f
Stéphane Chazelas
fonte
1
Sim, o busybox era uma versão mais leve aqui. Depois de re-build, find . -mtime +6 -type f -exec rm {} \;trabalhou para mim
Ravi
2

De man find:

-atime n

Último acesso ao arquivo n * 24 horas atrás. Quando descobrir quantos períodos de 24 horas atrás o arquivo foi acessado pela última vez, qualquer parte fracionária é ignorada; portanto, para corresponder ao tempo +1, um arquivo deve ter sido acessado há pelo menos dois dias.

-ctime n

O status do arquivo foi alterado pela última vez há * 24 horas. Consulte os comentários para -atime para entender como o arredondamento afeta a interpretação dos tempos de alteração do status do arquivo.

Dependendo dos casos de uso dos arquivos que você deseja excluir, essas são suas únicas outras opções find. Por que mtimenão está disponível? Qual sistema de arquivos você está usando? Você explorou outras opções?

OneK
fonte
Fazer mais perguntas ao OP deve ser feito como comentários esclarecedores , não como respostas .
Jeff Schaller