Não há como confiar nas datas de quando um arquivo foi copiado ou movido para uma pasta. O Windows consegue preservá-lo em sistemas de arquivos, unidades, compartilhamentos de rede etc. Você pode conseguir resolver algo com um servidor de arquivos linux ou impedir que as pessoas copiem arquivos diretamente usando FTP ou um sistema de upload baseado na Web.
Se você concorda com as pessoas que não conseguem modificar os arquivos após o upload, você pode ter pastas de upload e acesso separadas e um script que move os arquivos entre elas e as atualiza novamente. Mas parece que você deseja que as pessoas possam modificar os arquivos diretamente.
Portanto, uma solução simples, embora um tanto invasiva, seria mexer com as datas. Eu escreveria dois scripts:
Script de alteração de data por hora
Faça com que um script seja executado uma vez por hora, no seu idioma preferido, que:
- Procura qualquer arquivo com uma data modificada nos últimos 20 anos.
- Quando encontrar esse arquivo, altere sua data de modificação para hoje menos 20 anos.
No PowerShell, seria algo parecido com isto:
$path = "D:\test"
$today = Get-Date
$before = $today.AddDays(-7300) #356*20 days
Get-ChildItem -Recurse -Path $path | foreach {
if ($_.LastWriteTime -gt $before) {
Write-Host $_.Name
$_.LastWriteTime = $before
}
}
A execução desse script hoje (27 de maio) define a data de modificação de todos os arquivos para 1º de junho de 1994 - exatamente há 356 * 20 dias. Como está alterando apenas arquivos mais recentes que o valor $ before, não tocará nos arquivos que já definiu para o passado.
Script de limpeza
O script de limpeza seria executado todas as noites e:
- Pesquise arquivos com data de modificação "há 20 anos e X dias atrás"
- Exclua-os
Não escreverei o script para esta parte - há muitos utilitários que podem lidar com a exclusão de arquivos anteriores a uma data especificada, escolha o que desejar. A parte importante é procurar arquivos com mais de 7300 + X dias, em que X é o número de dias que você deseja mantê-los desde a última modificação.
Vantagens
Isso tem algumas vantagens sobre as outras respostas aqui:
- O cronômetro será redefinido se alguém modificar o arquivo.
- Não há necessidade de fluxos alternativos do NTFS para marcar os arquivos (que são preservados ao mover o arquivo, portanto, isso pode causar a exclusão prematura de um arquivo modificado)
- Deve ter um impacto mínimo, se houver, no desempenho. Não há necessidade de manter um banco de dados ou lista de nomes de arquivos e / ou hashes.
- Nada quebra horrivelmente se os scripts falharem na execução. Não há nenhum serviço ou programa em execução constante necessário para atualizar a data. Apenas algumas tarefas agendadas. As soluções que dependem da observação de novos arquivos e da atualização da última hora modificada para o momento podem acabar excluindo novos arquivos se o serviço falhar ou executar uma condição de corrida.
O único problema que vejo é se as pessoas copiam um arquivo modificado pela última vez há 20 anos para a pasta suspensa. Acho que, na maioria dos cenários, é pouco provável que isso seja um problema, mas pode surgir.