Skip to content

Instantly share code, notes, and snippets.

@gaarf
Created April 21, 2016 22:38
Show Gist options
  • Save gaarf/462c37b984c3f61ebab632cf4f67d920 to your computer and use it in GitHub Desktop.
Save gaarf/462c37b984c3f61ebab632cf4f67d920 to your computer and use it in GitHub Desktop.
var fs = require('fs'),
spawn = require('child_process').spawn;
var dataFiles = fs.readdirSync('./data');
function spawnAsPromise() {
var args = Array.prototype.slice.call(arguments);
return new Promise(function(resolve, reject) {
var stdout = '', stderr = '';
var cp = spawn.call(null, args.shift(), args, {cwd: __dirname});
cp.stdout.on('data', function(chunk) {
stdout += chunk;
});
cp.stderr.on('data', function(chunk) {
stderr += chunk;
});
cp.on('error', reject)
.on('close', function(code) {
if (code === 0) {
resolve(stdout);
} else {
reject(stderr);
}
});
});
}
function logAndExit (err) {
console.error('ERROR:', err);
process.exit(1);
}
// ----------------------------------------------------------------------------
if(!dataFiles.length) {
logAndExit('No files found in data directory!');
}
spawnAsPromise('diskutil', 'list')
.then(function (result) {
return result.split('\n')
.filter(function (line) {
return line.match(/DOS_FAT_32/);
})
.map(function (line) {
return line.split(/\W+/).pop();
});
})
.then(function (diskIds) {
if(!diskIds.length) {
logAndExit('No FAT disks found!');
}
// get mount points
return Promise.all( diskIds.map(function (id) {
return spawnAsPromise('diskutil', 'info', id)
.then(function (result) {
return result.split('\n').reduce(function (prev, line){
if (prev) { return prev; }
var m = line.match(/Mount Point:\s+(\/Volumes\/.+)$/);
return m && { id: id, mountPoint: m[1] };
}, null);
});
}) );
})
.then(function (disks) {
return Promise.all(disks.map(function (disk) {
console.log(disk);
return Promise.all( dataFiles.map(function (one) {
console.log('copying', one, 'to', disk.mountPoint);
return spawnAsPromise('cp', 'data/'+one, disk.mountPoint+'/'+one);
}))
.then(function () {
console.log('renaming', disk.id);
return spawnAsPromise('diskutil', 'rename', disk.id, 'WHATEVER');
})
.then(function () {
console.log('ejecting', disk.id);
return spawnAsPromise('diskutil', 'eject', disk.id);
});
}))
})
.then(function () {
console.log('\nall done!');
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment