Невозможно полагаться на даты, когда файл был скопирован или перемещен в папку. Windows удается сохранить его на файловых системах, дисках, сетевых ресурсах и т. Д. Возможно, вы сможете что-то решить с файловым сервером linux или запретить людям напрямую копировать файлы с помощью FTP или системы загрузки через Интернет.
Если вы согласны с тем, что люди не могут изменять файлы после их загрузки, у вас могут быть отдельные папки для загрузки и доступа, а также скрипт, который перемещает файлы между ними и обновляет их. Но, похоже, вы хотите, чтобы люди могли напрямую изменять файлы.
Таким образом, простое, хотя и несколько хакерское решение - связываться с датами. Я бы написал два сценария:
Почасовой скрипт Changer
Сценарий должен запускаться раз в час или около того на выбранном вами языке, который:
- Ищет любой файл с датой, измененной за последние 20 лет.
- Когда он найдет такой файл, измените дату его изменения на сегодня минус 20 лет.
В PowerShell это будет выглядеть примерно так:
$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
}
}
Запуск этого сценария сегодня (27 мая) устанавливает дату изменения всех файлов 1 июня 1994 года - ровно 356 * 20 дней назад. Поскольку он изменяет только файлы, которые новее значения $ before, он не затрагивает файлы, которые он уже установил в прошлом.
Скрипт очистки
Скрипт очистки запускается каждую ночь и:
- Поиск файлов с измененной датой "20 лет и X дней назад"
- Удалить их
Я не буду писать сценарий для этой части - существует множество утилит, которые могут обрабатывать удаление файлов, которые старше указанной даты, выбирайте то, что вам нравится. Важной частью является поиск файлов, которым 7300 + X дней, где X - количество дней, в которые вы хотите сохранить их с момента их последнего изменения.
преимущества
Это имеет несколько преимуществ перед другими ответами здесь:
- Таймер сбрасывается, если кто-то изменяет файл.
- Нет необходимости в альтернативных потоках NTFS для маркировки файлов (которые сохраняются при перемещении файла, поэтому могут привести к преждевременному удалению измененного файла)
- Должен иметь минимальное влияние на производительность. Нет необходимости вести базу данных или список имен файлов и / или хэшей.
- Ничто не сломается ужасно, если сценарии не запускаются. Для обновления даты нет службы или постоянно запущенной программы. Всего пара запланированных заданий. Решения, основанные на наблюдении за новыми файлами и обновлении их последнего измененного времени до настоящего времени, могут в конечном итоге удалить новые файлы, если служба выйдет из строя или перейдет в состояние состязания.
Единственная проблема, которую я вижу, - это если люди копируют файл, который был последний раз изменен 20 лет назад, в папку удаления. Я думаю, что в большинстве сценариев это вряд ли будет большой проблемой, но может возникнуть.