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

Способы извлечения файловой информации для больших данных

Я пытаюсь рекурсивно извлечь некоторую информацию о файле на своем файловом сервере. Я смог запустить приведенные ниже команды на своем ноутбуке. Когда я запускаю их на своем файловом сервере, который обрабатывает 4 ТБ данных, они запускаются или зависают на несколько часов.

Когда я использую программный вызов TreeSize для просмотра размера каталогов, он просматривает все 4 ТБ данных и отображает использование менее чем за 10 минут.

Мой вопрос в том, есть ли способ извлечь информацию о файле в 4 ТБ данных с помощью cmd или powershell и так же быстро, как программа TreeSize?

forfiles /s /d -2/21/2017 /c  "cmd /c echo @fdate, @ftime, @path" >  ./myfile.csv

dir /q /s /o:d > ./myfile2.txt

Вы выполняете новый cmd для каждого файла, что ужасно дорого. Это не ново:

У использования CMD.exe с FORFILES есть некоторые недостатки, новый процесс будет создан и уничтожен для каждого файла, который обрабатывает FORFILES, поэтому, если вы пропустите 1000 файлов, то 1000 копий CMD.exe будут открыты и закрыты, это будет влияют на производительность.

Утилиты контрастного размера, такие как TreeSize оптимизирован для скорости:

TreeSize Free работает с MFT (Master File Table) и достигает чрезвычайно высоких скоростей сканирования. Операции сканирования выполняются в потоке, поэтому вы увидите результаты почти мгновенно, пока TreeSize Free работает в фоновом режиме.

Вы можете добиться большего, не вызывая больше исполняемых файлов. PowerShell хорош в этом, даже на моем уровне новичка:

Get-ChildItem D:\path\ -recurse |
Where-Object {$_.CreationTime -and $_.CreationTime -lt "2/21/2017" } | 
Select-Object FullName, LastWriteTime |
Export-Csv myfile.csv

Желаемый выходной формат и другой файл - это упражнение для читателя.