Вот крошечное приложение, которое использует глубокую выборку, чтобы найти опухоли на любом диске или в каталоге. Он дважды проходит по дереву каталогов, один раз для его измерения, и второй раз, чтобы распечатать пути до 20 «случайных» байтов в каталоге.
void walk(string sDir, int iPass, int64& n, int64& n1, int64 step){
foreach(string sSubDir in sDir){
walk(sDir + "/" + sSubDir, iPass, n, n1, step);
}
foreach(string sFile in sDir){
string sPath = sDir + "/" + sFile;
int64 len = File.Size(sPath);
if (iPass == 2){
while(n1 <= n+len){
print sPath;
n1 += step;
}
}
n += len;
}
}
void dscan(){
int64 n = 0, n1 = 0, step = 0;
// pass 1, measure
walk(".", 1, n, n1);
print n;
// pass 2, print
step = n/20; n1 = step/2; n = 0;
walk(".", 2, n, n1);
print n;
}
Вывод выглядит так для моей папки Program Files:
7,908,634,694
.\ArcSoft\PhotoStudio 2000\Samples\3.jpg
.\Common Files\Java\Update\Base Images\j2re1.4.2-b28\core1.zip
.\Common Files\Wise Installation Wizard\WISDED53B0BB67C4244AE6AD6FD3C28D1EF_7_0_2_7.MSI
.\Insightful\splus62\java\jre\lib\jaws.jar
.\Intel\Compiler\Fortran\9.1\em64t\bin\tselect.exe
.\Intel\Download\IntelFortranProCompiler91\Compiler\Itanium\Data1.cab
.\Intel\MKL\8.0.1\em64t\bin\mkl_lapack32.dll
.\Java\jre1.6.0\bin\client\classes.jsa
.\Microsoft SQL Server\90\Setup Bootstrap\sqlsval.dll
.\Microsoft Visual Studio\DF98\DOC\TAPI.CHM
.\Microsoft Visual Studio .NET 2003\CompactFrameworkSDK\v1.0.5000\Windows CE\sqlce20sql2ksp1.exe
.\Microsoft Visual Studio .NET 2003\SDK\v1.1\Tool Developers Guide\docs\Partition II Metadata.doc
.\Microsoft Visual Studio .NET 2003\Visual Studio .NET Enterprise Architect 2003 - English\Logs\VSMsiLog0A34.txt
.\Microsoft Visual Studio 8\Microsoft Visual Studio 2005 Professional Edition - ENU\Logs\VSMsiLog1A9E.txt
.\Microsoft Visual Studio 8\SmartDevices\SDK\CompactFramework\2.0\v2.0\WindowsCE\wce500\mipsiv\NETCFv2.wce5.mipsiv.cab
.\Microsoft Visual Studio 8\VC\ce\atlmfc\lib\armv4i\UafxcW.lib
.\Microsoft Visual Studio 8\VC\ce\Dll\mipsii\mfc80ud.pdb
.\Movie Maker\MUI\0409\moviemk.chm
.\TheCompany\TheProduct\docs\TheProduct User's Guide.pdf
.\VNI\CTT6.0\help\StatV1.pdf
7,908,634,694
Это говорит мне, что каталог 7,9 ГБ, из которых
- ~ 15% идет на компилятор Intel Fortran
- ~ 15% идет на VS .NET 2003
- ~ 20% идет на VS 8
Достаточно просто спросить, можно ли выгрузить какой-либо из них.
Он также рассказывает о типах файлов, которые распределены по файловой системе, но вместе взятые предоставляют возможность для экономии места:
- ~ 15% примерно идет в файлы .cab и .MSI
- ~ 10% примерно идет на регистрацию текстовых файлов
Он также показывает множество других вещей, без которых я, вероятно, мог бы обойтись, таких как «SmartDevices» и поддержка «ce» (~ 15%).
Это занимает линейное время, но это не нужно делать часто.
Примеры вещей, которые он нашел:
- резервные копии библиотек DLL во многих хранилищах кода, которые на самом деле не нужно сохранять
- резервная копия чьего-то жесткого диска на сервере в неясной директории
- объемные временные интернет-файлы
- древние документы и справочные файлы давно нужны