Detectar arquivos de extensão não é executado por um período

1

Como posso detectar os arquivos .class no meu espaço de trabalho que não foram executados por um determinado período e removê-los?

    
por Safe Mode 01.04.2014 / 23:42

3 respostas

4

O mais próximo que você pode descobrir quando um arquivo foi executado pela última vez é pelo atime em vez do tempo de modificação - a execução não modifica os arquivos. No entanto, não há como saber se o arquivo foi acessado por algum outro motivo. Embora, se um arquivo não tenha sido acessado dentro de um período de tempo específico, ele não pode ter sido executado.

Para listar arquivos executáveis não acessados por mais de 24 horas, você pode fazer:

find workspace_dir -type f -perms /111 -atime +1

Para excluí-los ( certifique-se de excluir apenas os que deseja primeiro ):

find workspace_dir -type f -perms /111 -atime +1 -exec rm {} +

Observe que, com SSDs, é comum montar com a opção noatime para reduzir o número de gravações em disco e aumentar a vida útil. Se o sistema de arquivos estiver montado com a opção noatime , isso não funcionará.

Atualizar

Se esses arquivos forem Java .class , eles não serão executáveis diretamente. Para pesquisar / remover .class arquivos acessados há mais de 24 horas:

find workspace_dir -type f -name '*.class' -atime +1
find workspace_dir -type f -name '*.class' -atime +1 -exec rm {} +
    
por 02.04.2014 / 00:09
1

Quando o programa é executado, é o atime que é modificado, não o ctime ou o mtime.

NOTA: use stat <filename> se você não acredita em mim.

Para verificar qual arquivo foi acessado entre duas datas definidas, use a opção -newer em find

Exemplo:

find ./ -name "*.class" -newerat "2014-03-01" ! -newerat "2014-04-02 "

Exibirá qualquer arquivo que termine em .class e será acessado entre 1º de março de 2014 e 2 de abril de 2014.

    
por 02.04.2014 / 00:38
1

Você pode usar o seguinte comando para determinar qual dos arquivos foi modificado nos últimos tempos.

ls -halt *.class

Na ordem acima, o primeiro arquivo na saída significa que foi editado recentemente.

Se você quiser a saída na ordem inversa,

ls -haltr *.class

Na saída acima, o primeiro arquivo na saída significa que foi editado por muito tempo atrás.

Depois de determinar o período determinado , você pode fazer um rm nesses arquivos.

Agora, supondo que seu período determinado seja de 1 dia, você pode executar o comando abaixo.

find /path/to/files* -atime +1 -exec rm {} \;

Outra maneira de excluir os arquivos seria

rm -f 'find *.class -type f -atime +1'

É sempre melhor especificar o caminho completo do arquivo.

Só para ter certeza, antes de executar o comando, eu executaria o comando abaixo para descobrir quais arquivos não foram modificados no último dia.

echo 'find *.class -type f -atime +1'
    
por 01.04.2014 / 23:59

Tags