Advertisement
Foxscotch

split-folder

Mar 29th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var fs = require('fs-extra');
  2. var path = require('path');
  3. var EventEmitter = require('events').EventEmitter;
  4.  
  5.  
  6. // Directories for source, destination, and log
  7. // TODO: Turn these into command line arguments
  8. var sourceDir = 'files';
  9. var destDir = 'dest';
  10. var logPath = 'log.txt';
  11.  
  12. var extensions = [];
  13.  
  14.  
  15. var log = fs.createWriteStream(logPath);
  16.  
  17. log.on('error', function writeError(e) {
  18.     console.log('Could not write to log file: ' + e.message);
  19. });
  20.  
  21.  
  22. var events = new EventEmitter();
  23.  
  24. events.on('newdir', function logError(ext) {
  25.     log.write('Directory created for file extension ' + ext + '\n');
  26. });
  27.  
  28. events.on('error', function logError(e) {
  29.     log.write('Error: ' + e.message + '\n');
  30. });
  31.  
  32.  
  33. var walker = fs.walk(sourceDir);
  34. walker.on('data', function (file) {
  35.     if (file.stats.isFile()) {
  36.         var ext = path.extname(file.path).slice(1);
  37.  
  38.         if (extensions.indexOf(ext) == -1) {
  39.             fs.stat(path.join(destDir, ext), function (err) {
  40.                 if (err && err.code == 'ENOENT') {
  41.                     fs.mkdirSync(path.join(destDir, ext));
  42.                     events.emit('newdir', ext);
  43.                     extensions.push(ext);
  44.                 } else if (err) {
  45.                     events.emit('error', err);
  46.                     return;
  47.                 }
  48.  
  49.                 try {
  50.                     fs.copy(file.path, path.join(destDir, ext, path.basename(file.path)));
  51.                 } catch (e) {
  52.                     events.emit('error', e);
  53.                 }
  54.             });
  55.         }
  56.     }
  57. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement