#!/usr/bin/php
// Polyfill
// Fill a volume with many small files
if (count($argv) < 5) {
echo "Usage: php polyfill.php
\n";
echo "ex.: ./polyfill.php sample_files 5000 1 ~/Desktop/\n";
die;
}
$sample = $argv[1];
$total = $argv[2];
$deep = $argv[3];
$dest = $argv[4];
$dmg = $dest."/Polyfill.sparsebundle";
if (file_exists($dmg)) {
exec("trash ".$dmg."; umount -f /Volumes/Polyfill");
}
exec("hdiutil create -size 1tb -fs HFS+ -type SPARSEBUNDLE -volname Polyfill -attach ".$dmg);
$base = "/Volumes/Polyfill";
$sample_files = glob($sample."/*.*");
foreach($sample_files as $key => $file) {
if (is_dir($file)) {
unset($sample_files[$key]);
}
}
for ($i = 0; $i < $total; $i++) {
$stamp = md5(microtime());
$levels = array();
$levels[] = substr($stamp,0,2);
$levels[] = substr($stamp,2,2);
$levels[] = substr($stamp,4,2);
$levels[] = substr($stamp,6,2);
$levels[] = substr($stamp,8,2);
$levels[] = substr($stamp,10,2);
if ($deep) {
$dest = $base."/".implode("/",$levels)."/".$stamp;
$check = array();
$check[] = $base."/".$levels[0];
$check[] = $base."/".$levels[0]."/".$levels[1];
$check[] = $base."/".$levels[0]."/".$levels[1]."/".$levels[2];
$check[] = $base."/".$levels[0]."/".$levels[1]."/".$levels[2]."/".$levels[3];
$check[] = $base."/".$levels[0]."/".$levels[1]."/".$levels[2]."/".$levels[3]."/".$levels[4];
$check[] = $base."/".$levels[0]."/".$levels[1]."/".$levels[2]."/".$levels[3]."/".$levels[4]."/".$levels[5];
foreach ($check as $dir) {
echo "check ".$dir."\n";
if (!file_exists($dir)) {
mkdir($dir);
}
}
} else {
$dest = $base."/".$stamp;
}
$use = $sample_files[array_rand($sample_files)];
$ext = pathinfo($use, PATHINFO_EXTENSION);
echo "cp ".$use." ".$dest.".".$ext."\n";
copy($use,$dest.".".$ext);
//copy($use,dirname($dest)."/".basename($use)); // make many dupes
}
exec("open /Volumes/Polyfill");
?>