Назад | Перейти на главную страницу

Ищете самый быстрый способ отсеять старые файлы

У нас есть несколько файловых серверов, на которых я работаю, и хранит файлы объемом в терабайты и терабайты. В настоящее время у нас нет системы для архивирования / удаления устаревших данных. Моя задача - создать скрипт, который будет перемещать / удалять файлы старше 3-х лет. Перемещение / удаление файлов в сторону, просто «получить» файлы является проблемой. Пока использую Powershell.

Я сталкиваюсь с файлами, в которых имя файла / путь длиннее ~ 248 символов, которые Powershell, похоже, не может обработать. Я также изучал Robocopy, но у Robocopy нет возможности получить доступ к свойству файла LastAccessTime. Плюс Powershell кажется очень медленным. Вот код, с которым я тестировал:

Get-ChildItem "\\path" -Force -Recurse | 
        where {!($_.PSIsContainer) -and ($_.LastAccessTime -lt (Get-Date).AddYears(-3))} | 
        select Mode,LastAccessTime,Length,Name

У меня такой вопрос: есть ли более быстрый и эффективный способ рекурсивного "получения" файлов объемом в терабайтах (включая свойство LastAccessTime), где некоторые пути длиннее 248 символов?

В основном ищу бесплатные решения, но если есть хорошие платные решения, я был бы готов их проверить.

Пример кода будет медленным, поскольку вы рекурсивно перечисляете каждый отдельный файл и каталог перед применением фильтра. Это не вина PowerShell, базовые классы файловой системы в .Net на самом деле очень быстрые.

Вы хотите использовать параметры встроенного фильтра вместо перехода к объекту where (как правило, выполняйте фильтрацию как можно дальше "влево").

Если вы используете Win2k8 или новее, вы можете использовать диспетчер ресурсов файлового сервера для создания задачи истечения срока действия файлов, которая перемещает файлы старше x в другой каталог.

Не так давно меня укусил PowerShell, когда я делал что-то подобное. На это нужны годы и возрасты. К счастью, у меня был установлен Cygwin, и я мог протестировать соответствующий маневр, используя собственные команды * nix. Разница во времени была ошеломляющей.

Таким образом, с точки зрения скорости медлительность связана не столько с окнами или файловой системой как таковой, сколько с эффективностью выполнения используемого языка.

Глубина / длина пути я еще не экспериментировал, но для этих очень трудоемких задач обработки файлов я теперь использую cygwin поверх PowerShell на машине с Windows. Это отстой, но это так.

Вероятно, есть другие, более рекомендуемые альтернативы, которые также ускоряют файловые операции, чем собственные команды Windows. Я думаю об этом, если и есть.

Я просто собираюсь использовать Robocopy и использовать LastModifiedDate.