Я пытаюсь создать «Drop Folder» на общем диске Windows, который доступен каждому. Я бы хотел, чтобы файлы автоматически удалялись, если они находятся в папке более X дней.
Однако, похоже, что все методы, которые я нашел для этого, используют дату последнего изменения, время последнего доступа или дату создания файла.
Я пытаюсь сделать из этого папку, в которую пользователь может перетащить файлы, чтобы поделиться с кем-то. Если кто-то скопирует или переместит сюда файлы, я бы хотел, чтобы часы начали тикать в этот момент. Тем не менее, дата последнего изменения и дата создания файла не будут обновлены, если кто-то фактически не изменяет файл. Время последнего доступа обновляется слишком часто ... кажется, что простое открытие каталога в проводнике Windows обновит время последнего доступа.
Кто-нибудь знает решение этой проблемы? Я думаю, что каталогизация хэша файлов на ежедневной основе, а затем истечение срока действия файлов на основе хэшей, старше определенной даты, может быть решением .... но получение хэшей файлов может занять много времени.
Благодарим за любую идею!
Примечание:
я уже рассмотрел довольно много ответов здесь ... просмотрел монитор ресурсов файлового сервера, сценарии powershell, пакетные сценарии и т. Д. Они по-прежнему используют время последнего доступа, время последнего изменения или время создания ... которые, как описано, не соответствуют вышеуказанным потребностям.
tmpwatch
.Ответы:
Мы использовали комбинацию сценария powershell и политики. Политика указывает, что пользователь должен создать папку внутри общего ресурса Drop_Zone, а затем скопировать любые файлы, которые он хочет, в эту папку. Когда папке будет 7 дней (с использованием CreationTime), сценарий powershell удалит ее.
Я также добавил некоторые записи в сценарий powershell, чтобы мы могли проверить его работу, и включил теневые копии, чтобы спасти совершенно неумелых от себя.
Вот сценарий без всякой логи.
источник
Если вы можете использовать NTFS, вы можете записать ключ (Guid) в альтернативный поток файла. Плюс дата, чтобы вы могли хранить базу данных в файлах.
Более подробную информацию можно найти на
http://blogs.technet.com/b/askcore/archive/2013/03/24/alternate-data-streams-in-ntfs.aspx
По сути, вы можете хранить дополнительный контент в отдельном потоке, который кодируется специальным именем.
источник
Вы можете использовать IO.FileSystemWatcher, который позволяет вам «просматривать» папку для новых созданных файлов. Вот кусочки, которые вам понадобятся, чтобы сделать эту работу.
Эти переменные настраивают путь для отслеживания и фильтр для точной настройки файлов для отслеживания:
Это устанавливает параметры для папки, которую нужно просмотреть, и действия, которые нужно выполнить при возникновении события. В основном это сбрасывает LastWriteTime для каждого файла, как написано:
Событие можно отменить при необходимости, используя это:
Наконец, вы можете запускать это один раз в день для очистки старых файлов:
Это должно быть все, что вам нужно ...
источник
Это было какое-то время, но я создал относительно простой метод решения этой проблемы.
Я бы коснулся любых файлов, добавленных в каталог для удаления (отслеживаемых с помощью утилиты мониторинга ресурсов), и установил дату последнего изменения на дату, добавленную в папку.
Затем я мог бы использовать дату последнего изменения для очистки любых файлов, которые должны быть удалены. Это также имеет то преимущество, что если кто-то действительно обновит файл, он сбросит обратный отсчет.
источник
Невозможно полагаться на даты, когда файл был скопирован или перемещен в папку. Windows удается сохранить его на файловых системах, дисках, сетевых ресурсах и т. Д. Возможно, вы сможете что-то решить с файловым сервером linux или запретить людям напрямую копировать файлы с помощью FTP или системы загрузки через Интернет.
Если вы согласны с тем, что люди не могут изменять файлы после их загрузки, у вас могут быть отдельные папки для загрузки и доступа, а также скрипт, который перемещает файлы между ними и обновляет их. Но, похоже, вы хотите, чтобы люди могли напрямую изменять файлы.
Таким образом, простое, хотя и несколько хакерское решение - связываться с датами. Я бы написал два сценария:
Почасовой скрипт Changer
Сценарий должен запускаться раз в час или около того на выбранном вами языке, который:
В PowerShell это будет выглядеть примерно так:
Запуск этого сценария сегодня (27 мая) устанавливает дату изменения всех файлов 1 июня 1994 года - ровно 356 * 20 дней назад. Поскольку он изменяет только файлы, которые новее значения $ before, он не затрагивает файлы, которые он уже установил в прошлом.
Скрипт очистки
Скрипт очистки запускается каждую ночь и:
Я не буду писать сценарий для этой части - существует множество утилит, которые могут обрабатывать удаление файлов, которые старше указанной даты, выбирайте то, что вам нравится. Важной частью является поиск файлов, которым 7300 + X дней, где X - количество дней, в которые вы хотите сохранить их с момента их последнего изменения.
преимущества
Это имеет несколько преимуществ перед другими ответами здесь:
Единственная проблема, которую я вижу, - это если люди копируют файл, который был последний раз изменен 20 лет назад, в папку удаления. Я думаю, что в большинстве сценариев это вряд ли будет большой проблемой, но может возникнуть.
источник
Вы можете формализовать добавление файлов в выпадающий список через веб-страницу, которая имеет «загружать» IFRAME. Затем пользователь может «опубликовать» файл, который вызывает задание PHP / ASP на сервере, который берет файл и помещает его в расположение сборщика. PHP / ASP может выполнять любое количество операций индексирования / анализа.
источник
Я хотел бы создать сценарий, который запускается как запланированные задачи каждые пять минут и выполняет две вещи.
источник
Существует существующий механизм для пометки файлов, бит Archive. Он был там с первых дней существования DOS и присутствует как в FAT, так и в NTFS.
По сути, для каждого файла установлен архивный бит по умолчанию. Если вы видите файл с битом архива в папке удаления, (1) очистите этот бит и (2) установите его дату на сегодня. Если вы видите файл без этого бита и с датой <= 7 дней в прошлом, удалите его.
Если пользователь записывает в файл, пока он находится в папке удаления, его архивный бит устанавливается снова, поэтому его время жизни также сбрасывается на 7 дней. В конце концов, это новый файл.
Теперь вы можете безопасно использовать FileSystemWatcher. Любые проблемы, которые у него есть (например, повторяющиеся события, переполнение буфера, потеря подробной информации), больше не имеют значения, так как соответствующая информация находится в метаданных файла.
источник