Aquí hay una pequeña aplicación que utiliza un muestreo profundo para encontrar tumores en cualquier disco o directorio. Recorre el árbol del directorio dos veces, una para medirlo y la segunda para imprimir las rutas a 20 bytes "aleatorios" en el directorio.
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;
}
El resultado se ve así para mi directorio de Archivos de programa:
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
Me dice que el directorio es 7.9gb, de los cuales
- ~ 15% va al compilador Intel Fortran
- ~ 15% va a VS .NET 2003
- ~ 20% va a VS 8
Es bastante simple preguntar si alguno de estos puede descargarse.
También informa sobre los tipos de archivos que se distribuyen en todo el sistema de archivos, pero en conjunto representan una oportunidad para ahorrar espacio:
- ~ 15% aproximadamente va a archivos .cab y .MSI
- ~ 10% aproximadamente se destina a registrar archivos de texto
También muestra muchas otras cosas allí, que probablemente podría prescindir, como "SmartDevices" y el soporte "ce" (~ 15%).
Lleva tiempo lineal, pero no tiene que hacerse a menudo.
Ejemplos de cosas que ha encontrado:
- copias de seguridad de archivos DLL en muchos repositorios de código guardados, que realmente no necesitan guardarse
- una copia de seguridad del disco duro de alguien en el servidor, bajo un directorio oscuro
- voluminosos archivos temporales de internet
- documentos antiguos y archivos de ayuda que se necesitaban mucho