Не можна покладатися на дати, коли файл було скопійовано або переміщено у папку. Windows вдається зберегти його у файлових системах, накопичувачах, мережевих спільних ресурсах тощо. Можливо, вам вдасться щось розробити за допомогою файлового сервера linux або заборонити людям безпосередньо копіювати файли за допомогою FTP або веб-системи завантаження.
Якщо ви добре, якщо люди не можуть змінити файли після їх завантаження, ви можете мати окремі папки для завантаження та доступу та сценарій, який переміщує файли між ними та повторно датує їх. Але це здається, що ви хочете, щоб люди мали змогу безпосередньо змінювати файли.
Таким простим, хоч дещо хакітним рішенням було б возитися з фініками. Я написав би два сценарії:
Погодинний сценарій зміни дати
Потрібно запускати сценарій один раз на годину чи так на своїй бажаній мові, що:
- Шукає будь-який файл із датою, зміненою протягом останніх 20 років.
- Коли він знайде такий файл, змініть його дату, змінену на сьогодні мінус 20 років.
У повному віці це виглядатиме приблизно так:
$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 днів тому. Оскільки він змінює лише файли, новіші за $ до значення, він не торкнеться файлів, які він уже встановив у минулому.
Сценарій очищення
Сценарій очищення запускається щовечора, і:
- Пошук файлів із датою, зміненою "20 років і X днів тому"
- Видаліть їх
Я не буду писати сценарій для цієї частини - є безліч утиліт, які можуть обробляти видалення файлів, старших за вказану дату, виберіть те, що вам подобається. Важливою частиною є пошук файлів, що мають 7300 + X днів, де X - кількість днів, які ви хочете зберегти з моменту останнього зміни.
Переваги
Це має ряд переваг перед іншими відповідями тут:
- Таймер буде скинутий, якщо хтось модифікує файл.
- Немає необхідності в альтернативних потоках NTFS для маркування файлів (які зберігаються під час переміщення файлу, тому це може спричинити передчасне видалення зміненого файлу)
- Має мати мінімальний, якщо будь-який вплив на продуктивність. Не потрібно зберігати базу даних або список імен файлів та / або хешей.
- Нічого не зламається, якщо сценарії не запускаються. Для оновлення дати не потрібна служба або постійно запущена програма. Всього пара запланованих завдань. Рішення, які покладаються на перегляд нових файлів та оновлення останнього зміненого часу до цього моменту, можуть призвести до видалення нових файлів, якщо сервіс не працює або переходить у стан гонки.
Єдина проблема, яку я можу побачити, - це те, якщо люди копіюють файл, який востаннє змінено 20 років тому, у папку "drop". Я думаю, що в більшості сценаріїв це навряд чи буде великою проблемою, але це може вийти.