Я пытаюсь рекурсивно извлечь некоторую информацию о файле на своем файловом сервере. Я смог запустить приведенные ниже команды на своем ноутбуке. Когда я запускаю их на своем файловом сервере, который обрабатывает 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
Желаемый выходной формат и другой файл - это упражнение для читателя.