Ecco una piccola app che utilizza il campionamento profondo per trovare i tumori in qualsiasi disco o directory. Cammina due volte l'albero della directory, una volta per misurarlo, e la seconda volta per stampare i percorsi su 20 byte "casuali" nella directory.
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;
}
L'output è simile al seguente per la mia directory dei file di programma:
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
Mi dice che la directory è 7.9gb, di cui
- ~ 15% va al compilatore Intel Fortran
- ~ 15% va a VS .NET 2003
- ~ 20% va a VS 8
È abbastanza semplice chiedere se uno di questi può essere scaricato.
Descrive anche i tipi di file che sono distribuiti nel file system, ma considerati insieme rappresentano un'opportunità per risparmiare spazio:
- Il 15% circa è destinato ai file .cab e .MSI
- ~ Il 10% circa si riferisce alla registrazione di file di testo
Mostra anche molte altre cose, di cui probabilmente potrei fare a meno, come "SmartDevices" e il supporto "ce" (~ 15%).
Richiede un tempo lineare, ma non deve essere fatto spesso.
Esempi di cose che ha trovato:
- copie di backup di DLL in molti repository di codice salvate, che non realmente bisogno di essere salvato
- una copia di backup del disco rigido di qualcuno sul server, in una directory oscura
- voluminosi file temporanei Internet
- documenti antichi e file di aiuto necessari per un lungo passato